diff --git a/BUILD.gn b/BUILD.gn
index 45ceb5e..18beefc 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -337,50 +337,10 @@
     "src/ast/switch_statement.cc",
     "src/ast/switch_statement.h",
     "src/ast/traits.h",
-    "src/ast/type/access_control_type.cc",
-    "src/ast/type/access_control_type.h",
-    "src/ast/type/alias_type.cc",
-    "src/ast/type/alias_type.h",
-    "src/ast/type/array_type.cc",
-    "src/ast/type/array_type.h",
-    "src/ast/type/bool_type.cc",
-    "src/ast/type/bool_type.h",
-    "src/ast/type/depth_texture_type.cc",
-    "src/ast/type/depth_texture_type.h",
-    "src/ast/type/f32_type.cc",
-    "src/ast/type/f32_type.h",
-    "src/ast/type/i32_type.cc",
-    "src/ast/type/i32_type.h",
-    "src/ast/type/matrix_type.cc",
-    "src/ast/type/matrix_type.h",
-    "src/ast/type/multisampled_texture_type.cc",
-    "src/ast/type/multisampled_texture_type.h",
-    "src/ast/type/pointer_type.cc",
-    "src/ast/type/pointer_type.h",
-    "src/ast/type/sampled_texture_type.cc",
-    "src/ast/type/sampled_texture_type.h",
-    "src/ast/type/sampler_type.cc",
-    "src/ast/type/sampler_type.h",
-    "src/ast/type/storage_texture_type.cc",
-    "src/ast/type/storage_texture_type.h",
-    "src/ast/type/struct_type.cc",
-    "src/ast/type/struct_type.h",
-    "src/ast/type/texture_type.cc",
-    "src/ast/type/texture_type.h",
-    "src/ast/type/type.cc",
-    "src/ast/type/type.h",
-    "src/ast/type/u32_type.cc",
-    "src/ast/type/u32_type.h",
-    "src/ast/type/vector_type.cc",
-    "src/ast/type/vector_type.h",
-    "src/ast/type/void_type.cc",
-    "src/ast/type/void_type.h",
     "src/ast/type_constructor_expression.cc",
     "src/ast/type_constructor_expression.h",
     "src/ast/type_decoration.cc",
     "src/ast/type_decoration.h",
-    "src/ast/type_manager.cc",
-    "src/ast/type_manager.h",
     "src/ast/uint_literal.cc",
     "src/ast/uint_literal.h",
     "src/ast/unary_op.cc",
@@ -439,6 +399,46 @@
     "src/type_determiner.h",
     "src/validator/validator.cc",
     "src/validator/validator.h",
+    "src/type/access_control_type.cc",
+    "src/type/access_control_type.h",
+    "src/type/alias_type.cc",
+    "src/type/alias_type.h",
+    "src/type/array_type.cc",
+    "src/type/array_type.h",
+    "src/type/bool_type.cc",
+    "src/type/bool_type.h",
+    "src/type/depth_texture_type.cc",
+    "src/type/depth_texture_type.h",
+    "src/type/f32_type.cc",
+    "src/type/f32_type.h",
+    "src/type/i32_type.cc",
+    "src/type/i32_type.h",
+    "src/type/matrix_type.cc",
+    "src/type/matrix_type.h",
+    "src/type/multisampled_texture_type.cc",
+    "src/type/multisampled_texture_type.h",
+    "src/type/pointer_type.cc",
+    "src/type/pointer_type.h",
+    "src/type/sampled_texture_type.cc",
+    "src/type/sampled_texture_type.h",
+    "src/type/sampler_type.cc",
+    "src/type/sampler_type.h",
+    "src/type/storage_texture_type.cc",
+    "src/type/storage_texture_type.h",
+    "src/type/struct_type.cc",
+    "src/type/struct_type.h",
+    "src/type/texture_type.cc",
+    "src/type/texture_type.h",
+    "src/type/type.cc",
+    "src/type/type.h",
+    "src/type/type_manager.cc",
+    "src/type/type_manager.h",
+    "src/type/u32_type.cc",
+    "src/type/u32_type.h",
+    "src/type/vector_type.cc",
+    "src/type/vector_type.h",
+    "src/type/void_type.cc",
+    "src/type/void_type.h",
     "src/validator/validator_impl.cc",
     "src/validator/validator_impl.h",
     "src/validator/validator_test_helper.cc",
@@ -804,25 +804,7 @@
     "src/ast/switch_statement_test.cc",
     "src/ast/test_helper.h",
     "src/ast/traits_test.cc",
-    "src/ast/type/access_control_type_test.cc",
-    "src/ast/type/alias_type_test.cc",
-    "src/ast/type/array_type_test.cc",
-    "src/ast/type/bool_type_test.cc",
-    "src/ast/type/depth_texture_type_test.cc",
-    "src/ast/type/f32_type_test.cc",
-    "src/ast/type/i32_type_test.cc",
-    "src/ast/type/matrix_type_test.cc",
-    "src/ast/type/multisampled_texture_type_test.cc",
-    "src/ast/type/pointer_type_test.cc",
-    "src/ast/type/sampled_texture_type_test.cc",
-    "src/ast/type/sampler_type_test.cc",
-    "src/ast/type/storage_texture_type_test.cc",
-    "src/ast/type/struct_type_test.cc",
-    "src/ast/type/texture_type_test.cc",
-    "src/ast/type/u32_type_test.cc",
-    "src/ast/type/vector_type_test.cc",
     "src/ast/type_constructor_expression_test.cc",
-    "src/ast/type_manager_test.cc",
     "src/ast/uint_literal_test.cc",
     "src/ast/unary_op_expression_test.cc",
     "src/ast/variable_decl_statement_test.cc",
@@ -844,6 +826,24 @@
     "src/transform/test_helper.h",
     "src/transform/vertex_pulling_test.cc",
     "src/type_determiner_test.cc",
+    "src/type/access_control_type_test.cc",
+    "src/type/alias_type_test.cc",
+    "src/type/array_type_test.cc",
+    "src/type/bool_type_test.cc",
+    "src/type/depth_texture_type_test.cc",
+    "src/type/f32_type_test.cc",
+    "src/type/i32_type_test.cc",
+    "src/type/matrix_type_test.cc",
+    "src/type/multisampled_texture_type_test.cc",
+    "src/type/pointer_type_test.cc",
+    "src/type/sampled_texture_type_test.cc",
+    "src/type/sampler_type_test.cc",
+    "src/type/storage_texture_type_test.cc",
+    "src/type/struct_type_test.cc",
+    "src/type/texture_type_test.cc",
+    "src/type/type_manager_test.cc",
+    "src/type/u32_type_test.cc",
+    "src/type/vector_type_test.cc",
     "src/validator/validator_control_block_test.cc",
     "src/validator/validator_function_test.cc",
     "src/validator/validator_test.cc",
diff --git a/fuzzers/tint_ast_clone_fuzzer.cc b/fuzzers/tint_ast_clone_fuzzer.cc
index 6ce94bc..0ccf481 100644
--- a/fuzzers/tint_ast_clone_fuzzer.cc
+++ b/fuzzers/tint_ast_clone_fuzzer.cc
@@ -67,7 +67,7 @@
   for (auto* src_node : src.nodes()) {
     src_nodes.emplace(src_node);
   }
-  std::unordered_set<tint::ast::type::Type*> src_types;
+  std::unordered_set<tint::type::Type*> src_types;
   for (auto& src_type : src.types()) {
     src_types.emplace(src_type.second.get());
   }
diff --git a/include/tint/tint.h b/include/tint/tint.h
index e9e7c9d..19c69d1 100644
--- a/include/tint/tint.h
+++ b/include/tint/tint.h
@@ -19,7 +19,6 @@
 //                headers will need to be moved to include/tint/.
 
 #include "src/ast/pipeline_stage.h"
-#include "src/ast/type_manager.h"
 #include "src/demangler.h"
 #include "src/diagnostic/printer.h"
 #include "src/inspector/inspector.h"
@@ -30,6 +29,7 @@
 #include "src/transform/first_index_offset.h"
 #include "src/transform/manager.h"
 #include "src/transform/vertex_pulling.h"
+#include "src/type/type_manager.h"
 #include "src/type_determiner.h"
 #include "src/validator/validator.h"
 #include "src/writer/writer.h"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c655d71..b7c4fa5 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -56,16 +56,16 @@
   ast/bitcast_expression.h
   ast/block_statement.cc
   ast/block_statement.h
-  ast/bool_literal.h
   ast/bool_literal.cc
+  ast/bool_literal.h
   ast/break_statement.cc
   ast/break_statement.h
   ast/builder.cc
   ast/builder.h
-  ast/builtin.cc
-  ast/builtin.h
   ast/builtin_decoration.cc
   ast/builtin_decoration.h
+  ast/builtin.cc
+  ast/builtin.h
   ast/call_expression.cc
   ast/call_expression.h
   ast/call_statement.cc
@@ -106,8 +106,8 @@
   ast/int_literal.h
   ast/intrinsic.cc
   ast/intrinsic.h
-  ast/literal.h
   ast/literal.cc
+  ast/literal.h
   ast/location_decoration.cc
   ast/location_decoration.h
   ast/loop_statement.cc
@@ -151,50 +151,10 @@
   ast/switch_statement.cc
   ast/switch_statement.h
   ast/traits.h
-  ast/type_constructor_expression.h
   ast/type_constructor_expression.cc
+  ast/type_constructor_expression.h
   ast/type_decoration.cc
   ast/type_decoration.h
-  ast/type/access_control_type.cc
-  ast/type/access_control_type.h
-  ast/type/alias_type.cc
-  ast/type/alias_type.h
-  ast/type/array_type.cc
-  ast/type/array_type.h
-  ast/type/bool_type.cc
-  ast/type/bool_type.h
-  ast/type/depth_texture_type.cc
-  ast/type/depth_texture_type.h
-  ast/type/f32_type.cc
-  ast/type/f32_type.h
-  ast/type/i32_type.cc
-  ast/type/i32_type.h
-  ast/type/matrix_type.cc
-  ast/type/matrix_type.h
-  ast/type/multisampled_texture_type.cc
-  ast/type/multisampled_texture_type.h
-  ast/type/pointer_type.cc
-  ast/type/pointer_type.h
-  ast/type/sampled_texture_type.cc
-  ast/type/sampled_texture_type.h
-  ast/type/sampler_type.cc
-  ast/type/sampler_type.h
-  ast/type/storage_texture_type.cc
-  ast/type/storage_texture_type.h
-  ast/type/struct_type.cc
-  ast/type/struct_type.h
-  ast/type/texture_type.cc
-  ast/type/texture_type.h
-  ast/type/type.cc
-  ast/type/type.h
-  ast/type/u32_type.cc
-  ast/type/u32_type.h
-  ast/type/vector_type.cc
-  ast/type/vector_type.h
-  ast/type/void_type.cc
-  ast/type/void_type.h
-  ast/type_manager.cc
-  ast/type_manager.h
   ast/uint_literal.cc
   ast/uint_literal.h
   ast/unary_op.cc
@@ -251,6 +211,46 @@
   transform/vertex_pulling.h
   type_determiner.cc
   type_determiner.h
+  type/access_control_type.cc
+  type/access_control_type.h
+  type/alias_type.cc
+  type/alias_type.h
+  type/array_type.cc
+  type/array_type.h
+  type/bool_type.cc
+  type/bool_type.h
+  type/depth_texture_type.cc
+  type/depth_texture_type.h
+  type/f32_type.cc
+  type/f32_type.h
+  type/i32_type.cc
+  type/i32_type.h
+  type/matrix_type.cc
+  type/matrix_type.h
+  type/multisampled_texture_type.cc
+  type/multisampled_texture_type.h
+  type/pointer_type.cc
+  type/pointer_type.h
+  type/sampled_texture_type.cc
+  type/sampled_texture_type.h
+  type/sampler_type.cc
+  type/sampler_type.h
+  type/storage_texture_type.cc
+  type/storage_texture_type.h
+  type/struct_type.cc
+  type/struct_type.h
+  type/texture_type.cc
+  type/texture_type.h
+  type/type.cc
+  type/type.h
+  type/type_manager.cc
+  type/type_manager.h
+  type/u32_type.cc
+  type/u32_type.h
+  type/vector_type.cc
+  type/vector_type.h
+  type/void_type.cc
+  type/void_type.h
   validator/validator.cc
   validator/validator.h
   validator/validator_impl.cc
@@ -391,6 +391,7 @@
     ast/access_decoration_test.cc
     ast/array_accessor_expression_test.cc
     ast/assignment_statement_test.cc
+    ast/binary_expression_test.cc
     ast/binding_decoration_test.cc
     ast/bitcast_expression_test.cc
     ast/block_statement_test.cc
@@ -403,8 +404,8 @@
     ast/clone_context_test.cc
     ast/constant_id_decoration_test.cc
     ast/continue_statement_test.cc
-    ast/discard_statement_test.cc
     ast/decoration_test.cc
+    ast/discard_statement_test.cc
     ast/else_statement_test.cc
     ast/expression_test.cc
     ast/fallthrough_statement_test.cc
@@ -413,53 +414,34 @@
     ast/group_decoration_test.cc
     ast/identifier_expression_test.cc
     ast/if_statement_test.cc
+    ast/int_literal_test.cc
     ast/intrinsic_texture_helper_test.cc
     ast/intrinsic_texture_helper_test.h
-    ast/int_literal_test.cc
     ast/location_decoration_test.cc
     ast/loop_statement_test.cc
     ast/member_accessor_expression_test.cc
-    ast/module_test.cc
     ast/module_clone_test.cc
+    ast/module_test.cc
     ast/null_literal_test.cc
-    ast/binary_expression_test.cc
     ast/return_statement_test.cc
     ast/scalar_constructor_expression_test.cc
     ast/sint_literal_test.cc
     ast/stage_decoration_test.cc
     ast/stride_decoration_test.cc
-    ast/struct_member_test.cc
     ast/struct_member_offset_decoration_test.cc
+    ast/struct_member_test.cc
     ast/struct_test.cc
     ast/switch_statement_test.cc
     ast/test_helper.h
-    ast/type/access_control_type_test.cc
-    ast/type/alias_type_test.cc
-    ast/type/array_type_test.cc
-    ast/type/bool_type_test.cc
-    ast/type/depth_texture_type_test.cc
-    ast/type/f32_type_test.cc
-    ast/type/i32_type_test.cc
-    ast/type/matrix_type_test.cc
-    ast/type/multisampled_texture_type_test.cc
-    ast/type/pointer_type_test.cc
-    ast/type/sampled_texture_type_test.cc
-    ast/type/sampler_type_test.cc
-    ast/type/storage_texture_type_test.cc
-    ast/type/struct_type_test.cc
-    ast/type/texture_type_test.cc
-    ast/type/u32_type_test.cc
-    ast/type/vector_type_test.cc
     ast/traits_test.cc
     ast/type_constructor_expression_test.cc
-    ast/type_manager_test.cc
     ast/uint_literal_test.cc
     ast/unary_op_expression_test.cc
     ast/variable_decl_statement_test.cc
     ast/variable_test.cc
     ast/workgroup_decoration_test.cc
-    castable_test.cc
     block_allocator_test.cc
+    castable_test.cc
     demangler_test.cc
     diagnostic/formatter_test.cc
     diagnostic/printer_test.cc
@@ -469,6 +451,24 @@
     symbol_table_test.cc
     symbol_test.cc
     type_determiner_test.cc
+    type/access_control_type_test.cc
+    type/alias_type_test.cc
+    type/array_type_test.cc
+    type/bool_type_test.cc
+    type/depth_texture_type_test.cc
+    type/f32_type_test.cc
+    type/i32_type_test.cc
+    type/matrix_type_test.cc
+    type/multisampled_texture_type_test.cc
+    type/pointer_type_test.cc
+    type/sampled_texture_type_test.cc
+    type/sampler_type_test.cc
+    type/storage_texture_type_test.cc
+    type/struct_type_test.cc
+    type/texture_type_test.cc
+    type/type_manager_test.cc
+    type/u32_type_test.cc
+    type/vector_type_test.cc
     validator/validator_control_block_test.cc
     validator/validator_function_test.cc
     validator/validator_test.cc
diff --git a/src/ast/bitcast_expression.h b/src/ast/bitcast_expression.h
index ccee67e..d1376f2 100644
--- a/src/ast/bitcast_expression.h
+++ b/src/ast/bitcast_expression.h
@@ -20,7 +20,7 @@
 
 #include "src/ast/expression.h"
 #include "src/ast/literal.h"
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/bitcast_expression_test.cc b/src/ast/bitcast_expression_test.cc
index dcbd774..186e4b7 100644
--- a/src/ast/bitcast_expression_test.cc
+++ b/src/ast/bitcast_expression_test.cc
@@ -16,7 +16,7 @@
 
 #include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/f32_type.h"
+#include "src/type/f32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/bool_literal_test.cc b/src/ast/bool_literal_test.cc
index 97a9d5d..e07e66e 100644
--- a/src/ast/bool_literal_test.cc
+++ b/src/ast/bool_literal_test.cc
@@ -18,8 +18,8 @@
 #include "src/ast/null_literal.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/bool_type.h"
 #include "src/ast/uint_literal.h"
+#include "src/type/bool_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/builder.h b/src/ast/builder.h
index 1ebe604..35a49e1 100644
--- a/src/ast/builder.h
+++ b/src/ast/builder.h
@@ -33,20 +33,20 @@
 #include "src/ast/struct.h"
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/variable.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/case_statement_test.cc b/src/ast/case_statement_test.cc
index ce858df..ae60ba1 100644
--- a/src/ast/case_statement_test.cc
+++ b/src/ast/case_statement_test.cc
@@ -18,9 +18,9 @@
 #include "src/ast/if_statement.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/u32_type.h"
 #include "src/ast/uint_literal.h"
+#include "src/type/i32_type.h"
+#include "src/type/u32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/else_statement_test.cc b/src/ast/else_statement_test.cc
index 0d3403d..0855fec 100644
--- a/src/ast/else_statement_test.cc
+++ b/src/ast/else_statement_test.cc
@@ -19,7 +19,7 @@
 #include "src/ast/if_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/bool_type.h"
+#include "src/type/bool_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/expression.h b/src/ast/expression.h
index 12e038c..853a57c 100644
--- a/src/ast/expression.h
+++ b/src/ast/expression.h
@@ -20,7 +20,7 @@
 #include <vector>
 
 #include "src/ast/node.h"
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/expression_test.cc b/src/ast/expression_test.cc
index b48409d..c6887e3 100644
--- a/src/ast/expression_test.cc
+++ b/src/ast/expression_test.cc
@@ -15,8 +15,8 @@
 #include "src/ast/expression.h"
 
 #include "src/ast/test_helper.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/alias_type.h"
+#include "src/type/i32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/float_literal_test.cc b/src/ast/float_literal_test.cc
index 1cd4cfe..41be541 100644
--- a/src/ast/float_literal_test.cc
+++ b/src/ast/float_literal_test.cc
@@ -18,8 +18,8 @@
 #include "src/ast/null_literal.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/f32_type.h"
 #include "src/ast/uint_literal.h"
+#include "src/type/f32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/function.cc b/src/ast/function.cc
index 822d8cb..47863ca 100644
--- a/src/ast/function.cc
+++ b/src/ast/function.cc
@@ -19,11 +19,11 @@
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/texture_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/workgroup_decoration.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/texture_type.h"
 
 TINT_INSTANTIATE_CLASS_ID(tint::ast::Function);
 
diff --git a/src/ast/function.h b/src/ast/function.h
index 19fb034..248dd55 100644
--- a/src/ast/function.h
+++ b/src/ast/function.h
@@ -32,10 +32,10 @@
 #include "src/ast/node.h"
 #include "src/ast/pipeline_stage.h"
 #include "src/ast/statement.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/type.h"
 #include "src/ast/variable.h"
 #include "src/symbol.h"
+#include "src/type/sampler_type.h"
+#include "src/type/type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/int_literal_test.cc b/src/ast/int_literal_test.cc
index dfeb534..e207f83 100644
--- a/src/ast/int_literal_test.cc
+++ b/src/ast/int_literal_test.cc
@@ -19,9 +19,9 @@
 #include "src/ast/null_literal.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/u32_type.h"
 #include "src/ast/uint_literal.h"
+#include "src/type/i32_type.h"
+#include "src/type/u32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/intrinsic_texture_helper_test.cc b/src/ast/intrinsic_texture_helper_test.cc
index 256de22..b1a16c3 100644
--- a/src/ast/intrinsic_texture_helper_test.cc
+++ b/src/ast/intrinsic_texture_helper_test.cc
@@ -15,12 +15,12 @@
 #include "src/ast/intrinsic_texture_helper_test.h"
 
 #include "src/ast/builder.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/storage_texture_type.h"
 #include "src/ast/type_constructor_expression.h"
+#include "src/type/access_control_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/storage_texture_type.h"
 
 namespace tint {
 namespace ast {
@@ -135,7 +135,7 @@
   return out;
 }
 
-ast::type::Type* TextureOverloadCase::resultVectorComponentType(
+type::Type* TextureOverloadCase::resultVectorComponentType(
     ast::Builder* b) const {
   switch (texture_data_type) {
     case ast::intrinsic::test::TextureDataType::kF32:
@@ -162,26 +162,26 @@
     case ast::intrinsic::test::TextureKind::kRegular:
       return b->Var(
           "texture", ast::StorageClass::kUniformConstant,
-          b->create<ast::type::SampledTexture>(texture_dimension, datatype),
-          nullptr, decos);
+          b->create<type::SampledTexture>(texture_dimension, datatype), nullptr,
+          decos);
 
     case ast::intrinsic::test::TextureKind::kDepth:
       return b->Var("texture", ast::StorageClass::kUniformConstant,
-                    b->create<ast::type::DepthTexture>(texture_dimension),
-                    nullptr, decos);
+                    b->create<type::DepthTexture>(texture_dimension), nullptr,
+                    decos);
 
     case ast::intrinsic::test::TextureKind::kMultisampled:
-      return b->Var("texture", ast::StorageClass::kUniformConstant,
-                    b->create<ast::type::MultisampledTexture>(texture_dimension,
-                                                              datatype),
-                    nullptr, decos);
+      return b->Var(
+          "texture", ast::StorageClass::kUniformConstant,
+          b->create<type::MultisampledTexture>(texture_dimension, datatype),
+          nullptr, decos);
 
     case ast::intrinsic::test::TextureKind::kStorage: {
       auto* st =
-          b->create<ast::type::StorageTexture>(texture_dimension, image_format);
+          b->create<type::StorageTexture>(texture_dimension, image_format);
       st->set_type(datatype);
 
-      auto* ac = b->create<ast::type::AccessControl>(access_control, st);
+      auto* ac = b->create<type::AccessControl>(access_control, st);
       return b->Var("texture", ast::StorageClass::kUniformConstant, ac, nullptr,
                     decos);
     }
@@ -198,7 +198,7 @@
       b->create<ast::BindingDecoration>(1),
   };
   return b->Var("sampler", ast::StorageClass::kUniformConstant,
-                b->create<ast::type::Sampler>(sampler_kind), nullptr, decos);
+                b->create<type::Sampler>(sampler_kind), nullptr, decos);
 }
 
 std::vector<TextureOverloadCase> TextureOverloadCase::ValidCases() {
@@ -437,7 +437,7 @@
           ValidTextureOverload::kDimensionsStorageRO1d,
           "textureDimensions(t : texture_storage_1d<rgba32float>) -> i32",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k1d,
           TextureDataType::kF32,
           "textureDimensions",
@@ -448,7 +448,7 @@
           "textureDimensions(t : texture_storage_1d_array<rgba32float>) -> "
           "i32",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k1dArray,
           TextureDataType::kF32,
           "textureDimensions",
@@ -459,7 +459,7 @@
           "textureDimensions(t : texture_storage_2d<rgba32float>) -> "
           "vec2<i32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k2d,
           TextureDataType::kF32,
           "textureDimensions",
@@ -470,7 +470,7 @@
           "textureDimensions(t : texture_storage_2d_array<rgba32float>) -> "
           "vec2<i32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k2dArray,
           TextureDataType::kF32,
           "textureDimensions",
@@ -481,7 +481,7 @@
           "textureDimensions(t : texture_storage_3d<rgba32float>) -> "
           "vec3<i32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k3d,
           TextureDataType::kF32,
           "textureDimensions",
@@ -491,7 +491,7 @@
           ValidTextureOverload::kDimensionsStorageWO1d,
           "textureDimensions(t : texture_storage_1d<rgba32float>) -> i32",
           ast::AccessControl::kWriteOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k1d,
           TextureDataType::kF32,
           "textureDimensions",
@@ -502,7 +502,7 @@
           "textureDimensions(t : texture_storage_1d_array<rgba32float>) -> "
           "i32",
           ast::AccessControl::kWriteOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k1dArray,
           TextureDataType::kF32,
           "textureDimensions",
@@ -513,7 +513,7 @@
           "textureDimensions(t : texture_storage_2d<rgba32float>) -> "
           "vec2<i32>",
           ast::AccessControl::kWriteOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k2d,
           TextureDataType::kF32,
           "textureDimensions",
@@ -524,7 +524,7 @@
           "textureDimensions(t : texture_storage_2d_array<rgba32float>) -> "
           "vec2<i32>",
           ast::AccessControl::kWriteOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k2dArray,
           TextureDataType::kF32,
           "textureDimensions",
@@ -535,7 +535,7 @@
           "textureDimensions(t : texture_storage_3d<rgba32float>) -> "
           "vec3<i32>",
           ast::AccessControl::kWriteOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k3d,
           TextureDataType::kF32,
           "textureDimensions",
@@ -605,7 +605,7 @@
           ValidTextureOverload::kNumLayersStorageWO1dArray,
           "textureNumLayers(t : texture_storage_1d_array<rgba32float>) -> i32",
           ast::AccessControl::kWriteOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k1dArray,
           TextureDataType::kF32,
           "textureNumLayers",
@@ -615,7 +615,7 @@
           ValidTextureOverload::kNumLayersStorageWO2dArray,
           "textureNumLayers(t : texture_storage_2d_array<rgba32float>) -> i32",
           ast::AccessControl::kWriteOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k2dArray,
           TextureDataType::kF32,
           "textureNumLayers",
@@ -2240,7 +2240,7 @@
           "textureLoad(t      : texture_storage_1d<rgba32float>,\n"
           "            coords : i32) -> vec4<f32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k1d,
           TextureDataType::kF32,
           "textureLoad",
@@ -2256,7 +2256,7 @@
           "            coords      : i32,\n"
           "            array_index : i32) -> vec4<f32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k1dArray,
           TextureDataType::kF32,
           "textureLoad",
@@ -2271,7 +2271,7 @@
           "textureLoad(t           : texture_storage_2d<rgba8unorm>,\n"
           "            coords      : vec2<i32>) -> vec4<f32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba8Unorm,
+          type::ImageFormat::kRgba8Unorm,
           type::TextureDimension::k2d,
           TextureDataType::kF32,
           "textureLoad",
@@ -2285,7 +2285,7 @@
           "textureLoad(t           : texture_storage_2d<rgba8snorm>,\n"
           "            coords      : vec2<i32>) -> vec4<f32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba8Snorm,
+          type::ImageFormat::kRgba8Snorm,
           type::TextureDimension::k2d,
           TextureDataType::kF32,
           "textureLoad",
@@ -2299,7 +2299,7 @@
           "textureLoad(t           : texture_storage_2d<rgba8uint>,\n"
           "            coords      : vec2<i32>) -> vec4<u32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba8Uint,
+          type::ImageFormat::kRgba8Uint,
           type::TextureDimension::k2d,
           TextureDataType::kU32,
           "textureLoad",
@@ -2313,7 +2313,7 @@
           "textureLoad(t           : texture_storage_2d<rgba8sint>,\n"
           "            coords      : vec2<i32>) -> vec4<i32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba8Sint,
+          type::ImageFormat::kRgba8Sint,
           type::TextureDimension::k2d,
           TextureDataType::kI32,
           "textureLoad",
@@ -2327,7 +2327,7 @@
           "textureLoad(t           : texture_storage_2d<rgba16uint>,\n"
           "            coords      : vec2<i32>) -> vec4<u32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba16Uint,
+          type::ImageFormat::kRgba16Uint,
           type::TextureDimension::k2d,
           TextureDataType::kU32,
           "textureLoad",
@@ -2341,7 +2341,7 @@
           "textureLoad(t           : texture_storage_2d<rgba16sint>,\n"
           "            coords      : vec2<i32>) -> vec4<i32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba16Sint,
+          type::ImageFormat::kRgba16Sint,
           type::TextureDimension::k2d,
           TextureDataType::kI32,
           "textureLoad",
@@ -2355,7 +2355,7 @@
           "textureLoad(t           : texture_storage_2d<rgba16float>,\n"
           "            coords      : vec2<i32>) -> vec4<f32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba16Float,
+          type::ImageFormat::kRgba16Float,
           type::TextureDimension::k2d,
           TextureDataType::kF32,
           "textureLoad",
@@ -2369,7 +2369,7 @@
           "textureLoad(t           : texture_storage_2d<r32uint>,\n"
           "            coords      : vec2<i32>) -> vec4<u32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kR32Uint,
+          type::ImageFormat::kR32Uint,
           type::TextureDimension::k2d,
           TextureDataType::kU32,
           "textureLoad",
@@ -2383,7 +2383,7 @@
           "textureLoad(t           : texture_storage_2d<r32sint>,\n"
           "            coords      : vec2<i32>) -> vec4<i32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kR32Sint,
+          type::ImageFormat::kR32Sint,
           type::TextureDimension::k2d,
           TextureDataType::kI32,
           "textureLoad",
@@ -2397,7 +2397,7 @@
           "textureLoad(t           : texture_storage_2d<r32float>,\n"
           "            coords      : vec2<i32>) -> vec4<f32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kR32Float,
+          type::ImageFormat::kR32Float,
           type::TextureDimension::k2d,
           TextureDataType::kF32,
           "textureLoad",
@@ -2411,7 +2411,7 @@
           "textureLoad(t           : texture_storage_2d<rg32uint>,\n"
           "            coords      : vec2<i32>) -> vec4<u32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRg32Uint,
+          type::ImageFormat::kRg32Uint,
           type::TextureDimension::k2d,
           TextureDataType::kU32,
           "textureLoad",
@@ -2425,7 +2425,7 @@
           "textureLoad(t           : texture_storage_2d<rg32sint>,\n"
           "            coords      : vec2<i32>) -> vec4<i32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRg32Sint,
+          type::ImageFormat::kRg32Sint,
           type::TextureDimension::k2d,
           TextureDataType::kI32,
           "textureLoad",
@@ -2439,7 +2439,7 @@
           "textureLoad(t           : texture_storage_2d<rg32float>,\n"
           "            coords      : vec2<i32>) -> vec4<f32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRg32Float,
+          type::ImageFormat::kRg32Float,
           type::TextureDimension::k2d,
           TextureDataType::kF32,
           "textureLoad",
@@ -2453,7 +2453,7 @@
           "textureLoad(t           : texture_storage_2d<rgba32uint>,\n"
           "            coords      : vec2<i32>) -> vec4<u32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba32Uint,
+          type::ImageFormat::kRgba32Uint,
           type::TextureDimension::k2d,
           TextureDataType::kU32,
           "textureLoad",
@@ -2467,7 +2467,7 @@
           "textureLoad(t           : texture_storage_2d<rgba32sint>,\n"
           "            coords      : vec2<i32>) -> vec4<i32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba32Sint,
+          type::ImageFormat::kRgba32Sint,
           type::TextureDimension::k2d,
           TextureDataType::kI32,
           "textureLoad",
@@ -2481,7 +2481,7 @@
           "textureLoad(t           : texture_storage_2d<rgba32float>,\n"
           "            coords      : vec2<i32>) -> vec4<f32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k2d,
           TextureDataType::kF32,
           "textureLoad",
@@ -2497,7 +2497,7 @@
           "            coords      : vec2<i32>,\n"
           "            array_index : i32) -> vec4<f32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k2dArray,
           TextureDataType::kF32,
           "textureLoad",
@@ -2512,7 +2512,7 @@
           "textureLoad(t      : texture_storage_3d<rgba32float>,\n"
           "            coords : vec3<i32>) -> vec4<f32>",
           ast::AccessControl::kReadOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k3d,
           TextureDataType::kF32,
           "textureLoad",
@@ -2527,7 +2527,7 @@
           "             coords : i32,\n"
           "             value  : vec4<T>) -> void",
           ast::AccessControl::kWriteOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k1d,
           TextureDataType::kF32,
           "textureStore",
@@ -2544,7 +2544,7 @@
           "             array_index : i32,\n"
           "             value       : vec4<T>) -> void",
           ast::AccessControl::kWriteOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k1dArray,
           TextureDataType::kF32,
           "textureStore",
@@ -2561,7 +2561,7 @@
           "             coords : vec2<i32>,\n"
           "             value  : vec4<T>) -> void",
           ast::AccessControl::kWriteOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k2d,
           TextureDataType::kF32,
           "textureStore",
@@ -2578,7 +2578,7 @@
           "             array_index : i32,\n"
           "             value       : vec4<T>) -> void",
           ast::AccessControl::kWriteOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k2dArray,
           TextureDataType::kF32,
           "textureStore",
@@ -2595,7 +2595,7 @@
           "             coords : vec3<i32>,\n"
           "             value  : vec4<T>) -> void",
           ast::AccessControl::kWriteOnly,
-          ast::type::ImageFormat::kRgba32Float,
+          type::ImageFormat::kRgba32Float,
           type::TextureDimension::k3d,
           TextureDataType::kF32,
           "textureStore",
diff --git a/src/ast/intrinsic_texture_helper_test.h b/src/ast/intrinsic_texture_helper_test.h
index bd67b9f..f8a4b53 100644
--- a/src/ast/intrinsic_texture_helper_test.h
+++ b/src/ast/intrinsic_texture_helper_test.h
@@ -20,9 +20,9 @@
 
 #include "src/ast/access_control.h"
 #include "src/ast/builder.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/texture_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/texture_type.h"
 
 namespace tint {
 namespace ast {
@@ -240,7 +240,7 @@
 
   /// @param builder the AST builder used for the test
   /// @returns the vector component type of the texture function return value
-  ast::type::Type* resultVectorComponentType(ast::Builder* builder) const;
+  type::Type* resultVectorComponentType(ast::Builder* builder) const;
   /// @param builder the AST builder used for the test
   /// @returns a Variable holding the test texture
   ast::Variable* buildTextureVariable(ast::Builder* builder) const;
diff --git a/src/ast/literal.h b/src/ast/literal.h
index f5127ef..2b08eea 100644
--- a/src/ast/literal.h
+++ b/src/ast/literal.h
@@ -18,7 +18,7 @@
 #include <string>
 
 #include "src/ast/node.h"
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/module.cc b/src/ast/module.cc
index ac337d0..3561263 100644
--- a/src/ast/module.cc
+++ b/src/ast/module.cc
@@ -17,7 +17,7 @@
 #include <sstream>
 
 #include "src/ast/clone_context.h"
-#include "src/ast/type/struct_type.h"
+#include "src/type/struct_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/module.h b/src/ast/module.h
index 63fd9c7..76ed92e 100644
--- a/src/ast/module.h
+++ b/src/ast/module.h
@@ -25,11 +25,11 @@
 
 #include "src/ast/function.h"
 #include "src/ast/traits.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type_manager.h"
 #include "src/ast/variable.h"
 #include "src/block_allocator.h"
 #include "src/symbol_table.h"
+#include "src/type/alias_type.h"
+#include "src/type/type_manager.h"
 
 namespace tint {
 namespace ast {
@@ -181,7 +181,7 @@
   std::vector<type::Type*> constructed_types_;
   FunctionList functions_;
   BlockAllocator<Node> ast_nodes_;
-  TypeManager type_mgr_;
+  type::Manager type_mgr_;
 };
 
 }  // namespace ast
diff --git a/src/ast/module_clone_test.cc b/src/ast/module_clone_test.cc
index 1c7fd7b..e5007b0 100644
--- a/src/ast/module_clone_test.cc
+++ b/src/ast/module_clone_test.cc
@@ -126,7 +126,7 @@
   for (auto* src_node : src.nodes()) {
     src_nodes.emplace(src_node);
   }
-  std::unordered_set<ast::type::Type*> src_types;
+  std::unordered_set<type::Type*> src_types;
   for (auto& src_type : src.types()) {
     src_types.emplace(src_type.second.get());
   }
diff --git a/src/ast/module_test.cc b/src/ast/module_test.cc
index d195f32..605bdb8 100644
--- a/src/ast/module_test.cc
+++ b/src/ast/module_test.cc
@@ -20,10 +20,10 @@
 #include "gmock/gmock.h"
 #include "src/ast/function.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/struct_type.h"
 #include "src/ast/variable.h"
+#include "src/type/alias_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/struct_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/node.h b/src/ast/node.h
index b3d5cde..87e2ee9 100644
--- a/src/ast/node.h
+++ b/src/ast/node.h
@@ -23,15 +23,14 @@
 #include "src/source.h"
 
 namespace tint {
+namespace type {
+class Type;
+}
 namespace ast {
 
 class Module;
 class CloneContext;
 
-namespace type {
-class Type;
-}
-
 /// AST base class node
 class Node : public Castable<Node> {
  public:
diff --git a/src/ast/null_literal_test.cc b/src/ast/null_literal_test.cc
index 025e02c..93b6d44 100644
--- a/src/ast/null_literal_test.cc
+++ b/src/ast/null_literal_test.cc
@@ -18,8 +18,8 @@
 #include "src/ast/float_literal.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/i32_type.h"
 #include "src/ast/uint_literal.h"
+#include "src/type/i32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/scalar_constructor_expression_test.cc b/src/ast/scalar_constructor_expression_test.cc
index 25fdbd2..563a086 100644
--- a/src/ast/scalar_constructor_expression_test.cc
+++ b/src/ast/scalar_constructor_expression_test.cc
@@ -16,7 +16,7 @@
 
 #include "src/ast/bool_literal.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/bool_type.h"
+#include "src/type/bool_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/sint_literal_test.cc b/src/ast/sint_literal_test.cc
index e4a32d2..3cdb7bb 100644
--- a/src/ast/sint_literal_test.cc
+++ b/src/ast/sint_literal_test.cc
@@ -18,9 +18,9 @@
 #include "src/ast/float_literal.h"
 #include "src/ast/null_literal.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/u32_type.h"
 #include "src/ast/uint_literal.h"
+#include "src/type/i32_type.h"
+#include "src/type/u32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/struct_member.h b/src/ast/struct_member.h
index 52204f8..9f06562 100644
--- a/src/ast/struct_member.h
+++ b/src/ast/struct_member.h
@@ -22,8 +22,8 @@
 
 #include "src/ast/node.h"
 #include "src/ast/struct_member_decoration.h"
-#include "src/ast/type/type.h"
 #include "src/symbol.h"
+#include "src/type/type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/struct_member_test.cc b/src/ast/struct_member_test.cc
index df6758a..2591a64 100644
--- a/src/ast/struct_member_test.cc
+++ b/src/ast/struct_member_test.cc
@@ -19,7 +19,7 @@
 
 #include "src/ast/struct_member_offset_decoration.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/struct_test.cc b/src/ast/struct_test.cc
index a0af738..a34a2a6 100644
--- a/src/ast/struct_test.cc
+++ b/src/ast/struct_test.cc
@@ -21,7 +21,7 @@
 #include "src/ast/struct_block_decoration.h"
 #include "src/ast/struct_member.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/switch_statement_test.cc b/src/ast/switch_statement_test.cc
index 1753658..5f05e6a 100644
--- a/src/ast/switch_statement_test.cc
+++ b/src/ast/switch_statement_test.cc
@@ -20,7 +20,7 @@
 #include "src/ast/identifier_expression.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/type/struct_type_test.cc b/src/ast/type/struct_type_test.cc
deleted file mode 100644
index ca5be28..0000000
--- a/src/ast/type/struct_type_test.cc
+++ /dev/null
@@ -1,211 +0,0 @@
-// 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/ast/type/struct_type.h"
-
-#include <utility>
-
-#include "src/ast/stride_decoration.h"
-#include "src/ast/struct_member.h"
-#include "src/ast/struct_member_decoration.h"
-#include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/test_helper.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-
-namespace tint {
-namespace ast {
-namespace type {
-namespace {
-
-using StructTest = TestHelper;
-
-TEST_F(StructTest, Creation) {
-  auto* impl = create<ast::Struct>(StructMemberList{}, StructDecorationList{});
-  auto* ptr = impl;
-  auto* s = ty.struct_("S", impl);
-  EXPECT_EQ(s->impl(), ptr);
-}
-
-TEST_F(StructTest, Is) {
-  auto* impl = create<ast::Struct>(StructMemberList{}, StructDecorationList{});
-  auto* s = ty.struct_("S", impl);
-  type::Type* ty = s;
-  EXPECT_FALSE(ty->Is<AccessControl>());
-  EXPECT_FALSE(ty->Is<Alias>());
-  EXPECT_FALSE(ty->Is<Array>());
-  EXPECT_FALSE(ty->Is<Bool>());
-  EXPECT_FALSE(ty->Is<F32>());
-  EXPECT_FALSE(ty->Is<I32>());
-  EXPECT_FALSE(ty->Is<Matrix>());
-  EXPECT_FALSE(ty->Is<Pointer>());
-  EXPECT_FALSE(ty->Is<Sampler>());
-  EXPECT_TRUE(ty->Is<Struct>());
-  EXPECT_FALSE(ty->Is<Texture>());
-  EXPECT_FALSE(ty->Is<U32>());
-  EXPECT_FALSE(ty->Is<Vector>());
-}
-
-TEST_F(StructTest, TypeName) {
-  auto* impl = create<ast::Struct>(StructMemberList{}, StructDecorationList{});
-  auto* s = ty.struct_("my_struct", impl);
-  EXPECT_EQ(s->type_name(), "__struct_tint_symbol_1");
-}
-
-TEST_F(StructTest, MinBufferBindingSize) {
-  auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
-                       Member("bar", ty.u32, {MemberOffset(4)})},
-      StructDecorationList{});
-  auto* s_ty = ty.struct_("s_ty", str);
-
-  EXPECT_EQ(16u, s_ty->MinBufferBindingSize(MemoryLayout::kUniformBuffer));
-  EXPECT_EQ(8u, s_ty->MinBufferBindingSize(MemoryLayout::kStorageBuffer));
-}
-
-TEST_F(StructTest, MinBufferBindingSizeArray) {
-  Array arr(ty.u32, 4, ArrayDecorationList{create<StrideDecoration>(4)});
-
-  auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
-                       Member("bar", ty.u32, {MemberOffset(4)}),
-                       Member("bar", &arr, {MemberOffset(8)})},
-      StructDecorationList{});
-  auto* s_ty = ty.struct_("s_ty", str);
-
-  EXPECT_EQ(32u, s_ty->MinBufferBindingSize(MemoryLayout::kUniformBuffer));
-  EXPECT_EQ(24u, s_ty->MinBufferBindingSize(MemoryLayout::kStorageBuffer));
-}
-
-TEST_F(StructTest, MinBufferBindingSizeRuntimeArray) {
-  Array arr(ty.u32, 0, ArrayDecorationList{create<StrideDecoration>(4)});
-
-  auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
-                       Member("bar", ty.u32, {MemberOffset(4)}),
-                       Member("bar", ty.u32, {MemberOffset(8)})},
-      StructDecorationList{});
-  auto* s_ty = ty.struct_("s_ty", str);
-
-  EXPECT_EQ(12u, s_ty->MinBufferBindingSize(MemoryLayout::kStorageBuffer));
-}
-
-TEST_F(StructTest, MinBufferBindingSizeVec2) {
-  auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.vec2<u32>(), {MemberOffset(0)})},
-      StructDecorationList{});
-  auto* s_ty = ty.struct_("s_ty", str);
-
-  EXPECT_EQ(16u, s_ty->MinBufferBindingSize(MemoryLayout::kUniformBuffer));
-  EXPECT_EQ(8u, s_ty->MinBufferBindingSize(MemoryLayout::kStorageBuffer));
-}
-
-TEST_F(StructTest, MinBufferBindingSizeVec3) {
-  auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.vec3<u32>(), {MemberOffset(0)})},
-      StructDecorationList{});
-  auto* s_ty = ty.struct_("s_ty", str);
-
-  EXPECT_EQ(16u, s_ty->MinBufferBindingSize(MemoryLayout::kUniformBuffer));
-  EXPECT_EQ(16u, s_ty->MinBufferBindingSize(MemoryLayout::kStorageBuffer));
-}
-
-TEST_F(StructTest, MinBufferBindingSizeVec4) {
-  auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.vec4<u32>(), {MemberOffset(0)})},
-      StructDecorationList{});
-  auto* s_ty = ty.struct_("s_ty", str);
-
-  EXPECT_EQ(16u, s_ty->MinBufferBindingSize(MemoryLayout::kUniformBuffer));
-  EXPECT_EQ(16u, s_ty->MinBufferBindingSize(MemoryLayout::kStorageBuffer));
-}
-
-TEST_F(StructTest, BaseAlignment) {
-  auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
-                       Member("bar", ty.u32, {MemberOffset(8)})},
-      StructDecorationList{});
-  auto* s_ty = ty.struct_("s_ty", str);
-
-  EXPECT_EQ(16u, s_ty->BaseAlignment(MemoryLayout::kUniformBuffer));
-  EXPECT_EQ(4u, s_ty->BaseAlignment(MemoryLayout::kStorageBuffer));
-}
-
-TEST_F(StructTest, BaseAlignmentArray) {
-  Array arr(ty.u32, 4, ArrayDecorationList{create<StrideDecoration>(4)});
-  auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
-                       Member("bar", ty.u32, {MemberOffset(4)}),
-                       Member("bar", &arr, {MemberOffset(8)})},
-      StructDecorationList{});
-  auto* s_ty = ty.struct_("s_ty", str);
-
-  EXPECT_EQ(16u, s_ty->BaseAlignment(MemoryLayout::kUniformBuffer));
-  EXPECT_EQ(4u, s_ty->BaseAlignment(MemoryLayout::kStorageBuffer));
-}
-
-TEST_F(StructTest, BaseAlignmentRuntimeArray) {
-  Array arr(ty.u32, 0, ArrayDecorationList{create<StrideDecoration>(4)});
-  auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
-                       Member("bar", ty.u32, {MemberOffset(4)}),
-                       Member("bar", ty.u32, {MemberOffset(8)})},
-      StructDecorationList{});
-  auto* s_ty = ty.struct_("s_ty", str);
-
-  EXPECT_EQ(4u, s_ty->BaseAlignment(MemoryLayout::kStorageBuffer));
-}
-
-TEST_F(StructTest, BaseAlignmentVec2) {
-  auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.vec2<u32>(), {MemberOffset(0)})},
-      StructDecorationList{});
-  auto* s_ty = ty.struct_("s_ty", str);
-
-  EXPECT_EQ(16u, s_ty->BaseAlignment(MemoryLayout::kUniformBuffer));
-  EXPECT_EQ(8u, s_ty->BaseAlignment(MemoryLayout::kStorageBuffer));
-}
-
-TEST_F(StructTest, BaseAlignmentVec3) {
-  auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.vec3<u32>(), {MemberOffset(0)})},
-      StructDecorationList{});
-  auto* s_ty = ty.struct_("s_ty", str);
-
-  EXPECT_EQ(16u, s_ty->BaseAlignment(MemoryLayout::kUniformBuffer));
-  EXPECT_EQ(16u, s_ty->BaseAlignment(MemoryLayout::kStorageBuffer));
-}
-
-TEST_F(StructTest, BaseAlignmentVec4) {
-  auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.vec4<u32>(), {MemberOffset(0)})},
-      StructDecorationList{});
-  auto* s_ty = ty.struct_("s_ty", str);
-
-  EXPECT_EQ(16u, s_ty->BaseAlignment(MemoryLayout::kUniformBuffer));
-  EXPECT_EQ(16u, s_ty->BaseAlignment(MemoryLayout::kStorageBuffer));
-}
-
-}  // namespace
-}  // namespace type
-}  // namespace ast
-}  // namespace tint
diff --git a/src/ast/type_constructor_expression.h b/src/ast/type_constructor_expression.h
index 66f45b1..1fdbeec 100644
--- a/src/ast/type_constructor_expression.h
+++ b/src/ast/type_constructor_expression.h
@@ -19,7 +19,7 @@
 #include <utility>
 
 #include "src/ast/constructor_expression.h"
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/type_constructor_expression_test.cc b/src/ast/type_constructor_expression_test.cc
index 9b51d8e..b7bbfb0 100644
--- a/src/ast/type_constructor_expression_test.cc
+++ b/src/ast/type_constructor_expression_test.cc
@@ -20,8 +20,8 @@
 #include "src/ast/constructor_expression.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/uint_literal_test.cc b/src/ast/uint_literal_test.cc
index 1197ba7..db3e1bb 100644
--- a/src/ast/uint_literal_test.cc
+++ b/src/ast/uint_literal_test.cc
@@ -19,7 +19,7 @@
 #include "src/ast/null_literal.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/u32_type.h"
+#include "src/type/u32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/variable.h b/src/ast/variable.h
index 88257b2..e721ad0 100644
--- a/src/ast/variable.h
+++ b/src/ast/variable.h
@@ -23,9 +23,9 @@
 #include "src/ast/expression.h"
 #include "src/ast/node.h"
 #include "src/ast/storage_class.h"
-#include "src/ast/type/type.h"
 #include "src/ast/variable_decoration.h"
 #include "src/symbol.h"
+#include "src/type/type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/variable_decl_statement_test.cc b/src/ast/variable_decl_statement_test.cc
index a432804..60b878b 100644
--- a/src/ast/variable_decl_statement_test.cc
+++ b/src/ast/variable_decl_statement_test.cc
@@ -15,8 +15,8 @@
 #include "src/ast/variable_decl_statement.h"
 
 #include "src/ast/test_helper.h"
-#include "src/ast/type/f32_type.h"
 #include "src/ast/variable.h"
+#include "src/type/f32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/variable_test.cc b/src/ast/variable_test.cc
index 7f19618..331d17f 100644
--- a/src/ast/variable_test.cc
+++ b/src/ast/variable_test.cc
@@ -17,8 +17,8 @@
 #include "src/ast/constant_id_decoration.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc
index f23e954..91d6cd1 100644
--- a/src/inspector/inspector.cc
+++ b/src/inspector/inspector.cc
@@ -25,20 +25,20 @@
 #include "src/ast/null_literal.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/variable.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/texture_type.h"
+#include "src/type/type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
 namespace inspector {
@@ -183,12 +183,12 @@
     ast::Variable* var = nullptr;
     ast::Function::BindingInfo binding_info;
     std::tie(var, binding_info) = ruv;
-    if (!var->type()->Is<ast::type::AccessControl>()) {
+    if (!var->type()->Is<type::AccessControl>()) {
       continue;
     }
     auto* unwrapped_type = var->type()->UnwrapIfNeeded();
 
-    auto* str = unwrapped_type->As<ast::type::Struct>();
+    auto* str = unwrapped_type->As<type::Struct>();
     if (str == nullptr) {
       continue;
     }
@@ -199,8 +199,8 @@
 
     entry.bind_group = binding_info.group->value();
     entry.binding = binding_info.binding->value();
-    entry.min_buffer_binding_size = var->type()->MinBufferBindingSize(
-        ast::type::MemoryLayout::kUniformBuffer);
+    entry.min_buffer_binding_size =
+        var->type()->MinBufferBindingSize(type::MemoryLayout::kUniformBuffer);
 
     result.push_back(entry);
   }
@@ -307,7 +307,7 @@
     ast::Function::BindingInfo binding_info;
     std::tie(var, binding_info) = rsv;
 
-    auto* ac_type = var->type()->As<ast::type::AccessControl>();
+    auto* ac_type = var->type()->As<type::AccessControl>();
     if (ac_type == nullptr) {
       continue;
     }
@@ -316,14 +316,14 @@
       continue;
     }
 
-    if (!var->type()->UnwrapIfNeeded()->Is<ast::type::Struct>()) {
+    if (!var->type()->UnwrapIfNeeded()->Is<type::Struct>()) {
       continue;
     }
 
     entry.bind_group = binding_info.group->value();
     entry.binding = binding_info.binding->value();
-    entry.min_buffer_binding_size = var->type()->MinBufferBindingSize(
-        ast::type::MemoryLayout::kStorageBuffer);
+    entry.min_buffer_binding_size =
+        var->type()->MinBufferBindingSize(type::MemoryLayout::kStorageBuffer);
 
     result.push_back(entry);
   }
@@ -352,28 +352,27 @@
     entry.bind_group = binding_info.group->value();
     entry.binding = binding_info.binding->value();
 
-    auto* texture_type =
-        var->type()->UnwrapIfNeeded()->As<ast::type::Texture>();
+    auto* texture_type = var->type()->UnwrapIfNeeded()->As<type::Texture>();
     switch (texture_type->dim()) {
-      case ast::type::TextureDimension::k1d:
+      case type::TextureDimension::k1d:
         entry.dim = ResourceBinding::TextureDimension::k1d;
         break;
-      case ast::type::TextureDimension::k1dArray:
+      case type::TextureDimension::k1dArray:
         entry.dim = ResourceBinding::TextureDimension::k1dArray;
         break;
-      case ast::type::TextureDimension::k2d:
+      case type::TextureDimension::k2d:
         entry.dim = ResourceBinding::TextureDimension::k2d;
         break;
-      case ast::type::TextureDimension::k2dArray:
+      case type::TextureDimension::k2dArray:
         entry.dim = ResourceBinding::TextureDimension::k2dArray;
         break;
-      case ast::type::TextureDimension::k3d:
+      case type::TextureDimension::k3d:
         entry.dim = ResourceBinding::TextureDimension::k3d;
         break;
-      case ast::type::TextureDimension::kCube:
+      case type::TextureDimension::kCube:
         entry.dim = ResourceBinding::TextureDimension::kCube;
         break;
-      case ast::type::TextureDimension::kCubeArray:
+      case type::TextureDimension::kCubeArray:
         entry.dim = ResourceBinding::TextureDimension::kCubeArray;
         break;
       default:
@@ -381,30 +380,29 @@
         break;
     }
 
-    ast::type::Type* base_type = nullptr;
+    type::Type* base_type = nullptr;
     if (multisampled_only) {
-      base_type = texture_type->As<ast::type::MultisampledTexture>()
+      base_type = texture_type->As<type::MultisampledTexture>()
                       ->type()
                       ->UnwrapIfNeeded();
     } else {
-      base_type = texture_type->As<ast::type::SampledTexture>()
-                      ->type()
-                      ->UnwrapIfNeeded();
+      base_type =
+          texture_type->As<type::SampledTexture>()->type()->UnwrapIfNeeded();
     }
 
-    if (auto* at = base_type->As<ast::type::Array>()) {
+    if (auto* at = base_type->As<type::Array>()) {
       base_type = at->type();
-    } else if (auto* mt = base_type->As<ast::type::Matrix>()) {
+    } else if (auto* mt = base_type->As<type::Matrix>()) {
       base_type = mt->type();
-    } else if (auto* vt = base_type->As<ast::type::Vector>()) {
+    } else if (auto* vt = base_type->As<type::Vector>()) {
       base_type = vt->type();
     }
 
-    if (base_type->Is<ast::type::F32>()) {
+    if (base_type->Is<type::F32>()) {
       entry.sampled_kind = ResourceBinding::SampledKind::kFloat;
-    } else if (base_type->Is<ast::type::U32>()) {
+    } else if (base_type->Is<type::U32>()) {
       entry.sampled_kind = ResourceBinding::SampledKind::kUInt;
-    } else if (base_type->Is<ast::type::I32>()) {
+    } else if (base_type->Is<type::I32>()) {
       entry.sampled_kind = ResourceBinding::SampledKind::kSInt;
     } else {
       entry.sampled_kind = ResourceBinding::SampledKind::kUnknown;
diff --git a/src/inspector/inspector_test.cc b/src/inspector/inspector_test.cc
index 6f6f76c..ae64c86 100644
--- a/src/inspector/inspector_test.cc
+++ b/src/inspector/inspector_test.cc
@@ -39,27 +39,27 @@
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_decoration.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
 #include "src/ast/variable_decoration.h"
 #include "src/ast/workgroup_decoration.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/type_determiner.h"
 #include "tint/tint.h"
 
@@ -72,8 +72,8 @@
   InspectorHelper()
       : td_(std::make_unique<TypeDeterminer>(mod)),
         inspector_(std::make_unique<Inspector>(*mod)),
-        sampler_type_(ast::type::SamplerKind::kSampler),
-        comparison_sampler_type_(ast::type::SamplerKind::kComparisonSampler) {}
+        sampler_type_(type::SamplerKind::kSampler),
+        comparison_sampler_type_(type::SamplerKind::kComparisonSampler) {}
 
   /// Generates an empty function
   /// @param name name of the function created
@@ -177,10 +177,7 @@
   /// @param val value to initialize the variable with, if NULL no initializer
   ///            will be added.
   template <class T>
-  void AddConstantID(std::string name,
-                     uint32_t id,
-                     ast::type::Type* type,
-                     T* val) {
+  void AddConstantID(std::string name, uint32_t id, type::Type* type, T* val) {
     ast::Expression* constructor = nullptr;
     if (val) {
       constructor =
@@ -196,28 +193,28 @@
   /// @param type AST type of the literal, must resolve to BoolLiteral
   /// @param val scalar value for the literal to contain
   /// @returns a Literal of the expected type and value
-  ast::Literal* MakeLiteral(ast::type::Type* type, bool* val) {
+  ast::Literal* MakeLiteral(type::Type* type, bool* val) {
     return create<ast::BoolLiteral>(type, *val);
   }
 
   /// @param type AST type of the literal, must resolve to UIntLiteral
   /// @param val scalar value for the literal to contain
   /// @returns a Literal of the expected type and value
-  ast::Literal* MakeLiteral(ast::type::Type* type, uint32_t* val) {
+  ast::Literal* MakeLiteral(type::Type* type, uint32_t* val) {
     return create<ast::UintLiteral>(type, *val);
   }
 
   /// @param type AST type of the literal, must resolve to IntLiteral
   /// @param val scalar value for the literal to contain
   /// @returns a Literal of the expected type and value
-  ast::Literal* MakeLiteral(ast::type::Type* type, int32_t* val) {
+  ast::Literal* MakeLiteral(type::Type* type, int32_t* val) {
     return create<ast::SintLiteral>(type, *val);
   }
 
   /// @param type AST type of the literal, must resolve to FloattLiteral
   /// @param val scalar value for the literal to contain
   /// @returns a Literal of the expected type and value
-  ast::Literal* MakeLiteral(ast::type::Type* type, float* val) {
+  ast::Literal* MakeLiteral(type::Type* type, float* val) {
     return create<ast::FloatLiteral>(type, *val);
   }
 
@@ -238,7 +235,7 @@
   /// @param idx index of member
   /// @param type type of member
   /// @returns a string for the member
-  std::string StructMemberName(size_t idx, ast::type::Type* type) {
+  std::string StructMemberName(size_t idx, type::Type* type) {
     return std::to_string(idx) + type->type_name();
   }
 
@@ -248,13 +245,13 @@
   ///                     type and offset of a member of the struct
   /// @param is_block whether or not to decorate as a Block
   /// @returns a struct type
-  ast::type::Struct* MakeStructType(
+  type::Struct* MakeStructType(
       const std::string& name,
-      std::vector<std::tuple<ast::type::Type*, uint32_t>> members_info,
+      std::vector<std::tuple<type::Type*, uint32_t>> members_info,
       bool is_block) {
     ast::StructMemberList members;
     for (auto& member_info : members_info) {
-      ast::type::Type* type;
+      type::Type* type;
       uint32_t offset;
       std::tie(type, offset) = member_info;
 
@@ -278,12 +275,12 @@
   /// @returns a tuple {struct type, access control type}, where the struct has
   ///          the layout for an uniform buffer, and the control type wraps the
   ///          struct.
-  std::tuple<ast::type::Struct*, std::unique_ptr<ast::type::AccessControl>>
+  std::tuple<type::Struct*, std::unique_ptr<type::AccessControl>>
   MakeUniformBufferTypes(
       const std::string& name,
-      std::vector<std::tuple<ast::type::Type*, uint32_t>> members_info) {
+      std::vector<std::tuple<type::Type*, uint32_t>> members_info) {
     auto* struct_type = MakeStructType(name, members_info, true);
-    auto access_type = std::make_unique<ast::type::AccessControl>(
+    auto access_type = std::make_unique<type::AccessControl>(
         ast::AccessControl::kReadOnly, struct_type);
     return {struct_type, std::move(access_type)};
   }
@@ -295,12 +292,12 @@
   /// @returns a tuple {struct type, access control type}, where the struct has
   ///          the layout for a storage buffer, and the control type wraps the
   ///          struct.
-  std::tuple<ast::type::Struct*, std::unique_ptr<ast::type::AccessControl>>
+  std::tuple<type::Struct*, std::unique_ptr<type::AccessControl>>
   MakeStorageBufferTypes(
       const std::string& name,
-      std::vector<std::tuple<ast::type::Type*, uint32_t>> members_info) {
+      std::vector<std::tuple<type::Type*, uint32_t>> members_info) {
     auto* struct_type = MakeStructType(name, members_info, false);
-    auto access_type = std::make_unique<ast::type::AccessControl>(
+    auto access_type = std::make_unique<type::AccessControl>(
         ast::AccessControl::kReadWrite, struct_type);
     return {struct_type, std::move(access_type)};
   }
@@ -312,12 +309,12 @@
   /// @returns a tuple {struct type, access control type}, where the struct has
   ///          the layout for a read-only storage buffer, and the control type
   ///          wraps the struct.
-  std::tuple<ast::type::Struct*, std::unique_ptr<ast::type::AccessControl>>
+  std::tuple<type::Struct*, std::unique_ptr<type::AccessControl>>
   MakeReadOnlyStorageBufferTypes(
       const std::string& name,
-      std::vector<std::tuple<ast::type::Type*, uint32_t>> members_info) {
+      std::vector<std::tuple<type::Type*, uint32_t>> members_info) {
     auto* struct_type = MakeStructType(name, members_info, false);
-    auto access_type = std::make_unique<ast::type::AccessControl>(
+    auto access_type = std::make_unique<type::AccessControl>(
         ast::AccessControl::kReadOnly, struct_type);
     return {struct_type, std::move(access_type)};
   }
@@ -329,7 +326,7 @@
   /// @param group the binding and group to use for the uniform buffer
   /// @param binding the binding number to use for the uniform buffer
   void AddBinding(const std::string& name,
-                  ast::type::Type* type,
+                  type::Type* type,
                   ast::StorageClass storage_class,
                   uint32_t group,
                   uint32_t binding) {
@@ -348,7 +345,7 @@
   /// @param group the binding/group/ to use for the uniform buffer
   /// @param binding the binding number to use for the uniform buffer
   void AddUniformBuffer(const std::string& name,
-                        ast::type::Type* type,
+                        type::Type* type,
                         uint32_t group,
                         uint32_t binding) {
     AddBinding(name, type, ast::StorageClass::kUniform, group, binding);
@@ -360,7 +357,7 @@
   /// @param group the binding/group to use for the storage buffer
   /// @param binding the binding number to use for the storage buffer
   void AddStorageBuffer(const std::string& name,
-                        ast::type::Type* type,
+                        type::Type* type,
                         uint32_t group,
                         uint32_t binding) {
     AddBinding(name, type, ast::StorageClass::kStorage, group, binding);
@@ -374,11 +371,11 @@
   ast::Function* MakeStructVariableReferenceBodyFunction(
       std::string func_name,
       std::string struct_name,
-      std::vector<std::tuple<size_t, ast::type::Type*>> members) {
+      std::vector<std::tuple<size_t, type::Type*>> members) {
     ast::StatementList stmts;
     for (auto member : members) {
       size_t member_idx;
-      ast::type::Type* member_type;
+      type::Type* member_type;
       std::tie(member_idx, member_type) = member;
       std::string member_name = StructMemberName(member_idx, member_type);
 
@@ -388,7 +385,7 @@
 
     for (auto member : members) {
       size_t member_idx;
-      ast::type::Type* member_type;
+      type::Type* member_type;
       std::tie(member_idx, member_type) = member;
       std::string member_name = StructMemberName(member_idx, member_type);
 
@@ -427,28 +424,28 @@
   /// @param dim the dimensions of the texture
   /// @param type the data type of the sampled texture
   /// @returns the generated SampleTextureType
-  std::unique_ptr<ast::type::SampledTexture> MakeSampledTextureType(
-      ast::type::TextureDimension dim,
-      ast::type::Type* type) {
-    return std::make_unique<ast::type::SampledTexture>(dim, type);
+  std::unique_ptr<type::SampledTexture> MakeSampledTextureType(
+      type::TextureDimension dim,
+      type::Type* type) {
+    return std::make_unique<type::SampledTexture>(dim, type);
   }
 
   /// Generates a DepthTexture appropriate for the params
   /// @param dim the dimensions of the texture
   /// @returns the generated DepthTexture
-  std::unique_ptr<ast::type::DepthTexture> MakeDepthTextureType(
-      ast::type::TextureDimension dim) {
-    return std::make_unique<ast::type::DepthTexture>(dim);
+  std::unique_ptr<type::DepthTexture> MakeDepthTextureType(
+      type::TextureDimension dim) {
+    return std::make_unique<type::DepthTexture>(dim);
   }
 
   /// Generates a MultisampledTexture appropriate for the params
   /// @param dim the dimensions of the texture
   /// @param type the data type of the sampled texture
   /// @returns the generated SampleTextureType
-  std::unique_ptr<ast::type::MultisampledTexture> MakeMultisampledTextureType(
-      ast::type::TextureDimension dim,
-      ast::type::Type* type) {
-    return std::make_unique<ast::type::MultisampledTexture>(dim, type);
+  std::unique_ptr<type::MultisampledTexture> MakeMultisampledTextureType(
+      type::TextureDimension dim,
+      type::Type* type) {
+    return std::make_unique<type::MultisampledTexture>(dim, type);
   }
 
   /// Adds a sampled texture variable to the module
@@ -457,7 +454,7 @@
   /// @param group the binding/group to use for the sampled texture
   /// @param binding the binding number to use for the sampled texture
   void AddSampledTexture(const std::string& name,
-                         ast::type::Type* type,
+                         type::Type* type,
                          uint32_t group,
                          uint32_t binding) {
     AddBinding(name, type, ast::StorageClass::kUniformConstant, group, binding);
@@ -469,13 +466,13 @@
   /// @param group the binding/group to use for the multi-sampled texture
   /// @param binding the binding number to use for the multi-sampled texture
   void AddMultisampledTexture(const std::string& name,
-                              ast::type::Type* type,
+                              type::Type* type,
                               uint32_t group,
                               uint32_t binding) {
     AddBinding(name, type, ast::StorageClass::kUniformConstant, group, binding);
   }
 
-  void AddGlobalVariable(const std::string& name, ast::type::Type* type) {
+  void AddGlobalVariable(const std::string& name, type::Type* type) {
     mod->AddGlobalVariable(
         Var(name, ast::StorageClass::kUniformConstant, type));
   }
@@ -483,7 +480,7 @@
   /// Adds a depth texture variable to the module
   /// @param name the name of the variable
   /// @param type the type to use
-  void AddDepthTexture(const std::string& name, ast::type::Type* type) {
+  void AddDepthTexture(const std::string& name, type::Type* type) {
     mod->AddGlobalVariable(
         Var(name, ast::StorageClass::kUniformConstant, type));
   }
@@ -501,7 +498,7 @@
       const std::string& texture_name,
       const std::string& sampler_name,
       const std::string& coords_name,
-      ast::type::Type* base_type,
+      type::Type* base_type,
       ast::FunctionDecorationList decorations) {
     std::string result_name = "sampler_result";
 
@@ -533,7 +530,7 @@
       const std::string& sampler_name,
       const std::string& coords_name,
       const std::string& array_index,
-      ast::type::Type* base_type,
+      type::Type* base_type,
       ast::FunctionDecorationList decorations) {
     std::string result_name = "sampler_result";
 
@@ -567,7 +564,7 @@
       const std::string& sampler_name,
       const std::string& coords_name,
       const std::string& depth_name,
-      ast::type::Type* base_type,
+      type::Type* base_type,
       ast::FunctionDecorationList decorations) {
     std::string result_name = "sampler_result";
 
@@ -586,7 +583,7 @@
   /// Gets an appropriate type for the data in a given texture type.
   /// @param sampled_kind type of in the texture
   /// @returns a pointer to a type appropriate for the coord param
-  ast::type::Type* GetBaseType(ResourceBinding::SampledKind sampled_kind) {
+  type::Type* GetBaseType(ResourceBinding::SampledKind sampled_kind) {
     switch (sampled_kind) {
       case ResourceBinding::SampledKind::kFloat:
         return ty.f32;
@@ -604,15 +601,15 @@
   /// @param dim dimensionality of the texture being sampled
   /// @param sampled_kind type of data in the texture
   /// @returns a pointer to a type appropriate for the coord param
-  ast::type::Type* GetCoordsType(ast::type::TextureDimension dim,
-                                 ResourceBinding::SampledKind sampled_kind) {
-    ast::type::Type* base_type = GetBaseType(sampled_kind);
-    if (dim == ast::type::TextureDimension::k1d) {
+  type::Type* GetCoordsType(type::TextureDimension dim,
+                            ResourceBinding::SampledKind sampled_kind) {
+    type::Type* base_type = GetBaseType(sampled_kind);
+    if (dim == type::TextureDimension::k1d) {
       return base_type;
-    } else if (dim == ast::type::TextureDimension::k1dArray ||
-               dim == ast::type::TextureDimension::k2d) {
+    } else if (dim == type::TextureDimension::k1dArray ||
+               dim == type::TextureDimension::k2d) {
       return vec_type(base_type, 2);
-    } else if (dim == ast::type::TextureDimension::kCubeArray) {
+    } else if (dim == type::TextureDimension::kCubeArray) {
       return vec_type(base_type, 4);
     }
     return vec_type(base_type, 3);
@@ -621,38 +618,35 @@
   TypeDeterminer* td() { return td_.get(); }
   Inspector* inspector() { return inspector_.get(); }
 
-  ast::type::Array* u32_array_type(uint32_t count) {
+  type::Array* u32_array_type(uint32_t count) {
     if (array_type_memo_.find(count) == array_type_memo_.end()) {
       array_type_memo_[count] =
-          create<ast::type::Array>(ty.u32, count,
-                                   ast::ArrayDecorationList{
-                                       create<ast::StrideDecoration>(4),
-                                   });
+          create<type::Array>(ty.u32, count,
+                              ast::ArrayDecorationList{
+                                  create<ast::StrideDecoration>(4),
+                              });
     }
     return array_type_memo_[count];
   }
-  ast::type::Vector* vec_type(ast::type::Type* type, uint32_t count) {
+  type::Vector* vec_type(type::Type* type, uint32_t count) {
     if (vector_type_memo_.find(std::tie(type, count)) ==
         vector_type_memo_.end()) {
       vector_type_memo_[std::tie(type, count)] =
-          std::make_unique<ast::type::Vector>(ty.u32, count);
+          std::make_unique<type::Vector>(ty.u32, count);
     }
     return vector_type_memo_[std::tie(type, count)].get();
   }
-  ast::type::Sampler* sampler_type() { return &sampler_type_; }
-  ast::type::Sampler* comparison_sampler_type() {
-    return &comparison_sampler_type_;
-  }
+  type::Sampler* sampler_type() { return &sampler_type_; }
+  type::Sampler* comparison_sampler_type() { return &comparison_sampler_type_; }
 
  private:
   std::unique_ptr<TypeDeterminer> td_;
   std::unique_ptr<Inspector> inspector_;
 
-  ast::type::Sampler sampler_type_;
-  ast::type::Sampler comparison_sampler_type_;
-  std::map<uint32_t, ast::type::Array*> array_type_memo_;
-  std::map<std::tuple<ast::type::Type*, uint32_t>,
-           std::unique_ptr<ast::type::Vector>>
+  type::Sampler sampler_type_;
+  type::Sampler comparison_sampler_type_;
+  std::map<uint32_t, type::Array*> array_type_memo_;
+  std::map<std::tuple<type::Type*, uint32_t>, std::unique_ptr<type::Vector>>
       vector_type_memo_;
 };
 
@@ -680,7 +674,7 @@
     : public InspectorHelper,
       public testing::Test {};
 struct GetSampledTextureTestParams {
-  ast::type::TextureDimension type_dim;
+  type::TextureDimension type_dim;
   inspector::ResourceBinding::TextureDimension inspector_dim;
   inspector::ResourceBinding::SampledKind sampled_kind;
 };
@@ -1287,8 +1281,8 @@
 }
 
 TEST_F(InspectorGetUniformBufferResourceBindingsTest, NonEntryPointFunc) {
-  ast::type::Struct* foo_struct_type;
-  std::unique_ptr<ast::type::AccessControl> foo_control_type;
+  type::Struct* foo_struct_type;
+  std::unique_ptr<type::AccessControl> foo_control_type;
   std::tie(foo_struct_type, foo_control_type) =
       MakeUniformBufferTypes("foo_type", {{ty.i32, 0}});
   AddUniformBuffer("foo_ub", foo_control_type.get(), 0, 0);
@@ -1340,8 +1334,8 @@
 }
 
 TEST_F(InspectorGetUniformBufferResourceBindingsTest, Simple) {
-  ast::type::Struct* foo_struct_type;
-  std::unique_ptr<ast::type::AccessControl> foo_control_type;
+  type::Struct* foo_struct_type;
+  std::unique_ptr<type::AccessControl> foo_control_type;
   std::tie(foo_struct_type, foo_control_type) =
       MakeUniformBufferTypes("foo_type", {{ty.i32, 0}});
   AddUniformBuffer("foo_ub", foo_control_type.get(), 0, 0);
@@ -1369,8 +1363,8 @@
 }
 
 TEST_F(InspectorGetUniformBufferResourceBindingsTest, MultipleMembers) {
-  ast::type::Struct* foo_struct_type;
-  std::unique_ptr<ast::type::AccessControl> foo_control_type;
+  type::Struct* foo_struct_type;
+  std::unique_ptr<type::AccessControl> foo_control_type;
   std::tie(foo_struct_type, foo_control_type) = MakeUniformBufferTypes(
       "foo_type", {{ty.i32, 0}, {ty.u32, 4}, {ty.f32, 8}});
   AddUniformBuffer("foo_ub", foo_control_type.get(), 0, 0);
@@ -1398,8 +1392,8 @@
 }
 
 TEST_F(InspectorGetUniformBufferResourceBindingsTest, MultipleUniformBuffers) {
-  ast::type::Struct* ub_struct_type;
-  std::unique_ptr<ast::type::AccessControl> ub_control_type;
+  type::Struct* ub_struct_type;
+  std::unique_ptr<type::AccessControl> ub_control_type;
   std::tie(ub_struct_type, ub_control_type) = MakeUniformBufferTypes(
       "ub_type", {{ty.i32, 0}, {ty.u32, 4}, {ty.f32, 8}});
   AddUniformBuffer("ub_foo", ub_control_type.get(), 0, 0);
@@ -1450,8 +1444,8 @@
 }
 
 TEST_F(InspectorGetUniformBufferResourceBindingsTest, ContainingArray) {
-  ast::type::Struct* foo_struct_type;
-  std::unique_ptr<ast::type::AccessControl> foo_control_type;
+  type::Struct* foo_struct_type;
+  std::unique_ptr<type::AccessControl> foo_control_type;
   std::tie(foo_struct_type, foo_control_type) =
       MakeUniformBufferTypes("foo_type", {{ty.i32, 0}, {u32_array_type(4), 4}});
   AddUniformBuffer("foo_ub", foo_control_type.get(), 0, 0);
@@ -1479,8 +1473,8 @@
 }
 
 TEST_F(InspectorGetStorageBufferResourceBindingsTest, Simple) {
-  ast::type::Struct* foo_struct_type;
-  std::unique_ptr<ast::type::AccessControl> foo_control_type;
+  type::Struct* foo_struct_type;
+  std::unique_ptr<type::AccessControl> foo_control_type;
   std::tie(foo_struct_type, foo_control_type) =
       MakeStorageBufferTypes("foo_type", {{ty.i32, 0}});
   AddStorageBuffer("foo_sb", foo_control_type.get(), 0, 0);
@@ -1508,8 +1502,8 @@
 }
 
 TEST_F(InspectorGetStorageBufferResourceBindingsTest, MultipleMembers) {
-  ast::type::Struct* foo_struct_type;
-  std::unique_ptr<ast::type::AccessControl> foo_control_type;
+  type::Struct* foo_struct_type;
+  std::unique_ptr<type::AccessControl> foo_control_type;
   std::tie(foo_struct_type, foo_control_type) = MakeStorageBufferTypes(
       "foo_type", {{ty.i32, 0}, {ty.u32, 4}, {ty.f32, 8}});
   AddStorageBuffer("foo_sb", foo_control_type.get(), 0, 0);
@@ -1537,8 +1531,8 @@
 }
 
 TEST_F(InspectorGetStorageBufferResourceBindingsTest, MultipleStorageBuffers) {
-  ast::type::Struct* sb_struct_type;
-  std::unique_ptr<ast::type::AccessControl> sb_control_type;
+  type::Struct* sb_struct_type;
+  std::unique_ptr<type::AccessControl> sb_control_type;
   std::tie(sb_struct_type, sb_control_type) = MakeStorageBufferTypes(
       "sb_type", {{ty.i32, 0}, {ty.u32, 4}, {ty.f32, 8}});
   AddStorageBuffer("sb_foo", sb_control_type.get(), 0, 0);
@@ -1592,8 +1586,8 @@
 }
 
 TEST_F(InspectorGetStorageBufferResourceBindingsTest, ContainingArray) {
-  ast::type::Struct* foo_struct_type;
-  std::unique_ptr<ast::type::AccessControl> foo_control_type;
+  type::Struct* foo_struct_type;
+  std::unique_ptr<type::AccessControl> foo_control_type;
   std::tie(foo_struct_type, foo_control_type) =
       MakeStorageBufferTypes("foo_type", {{ty.i32, 0}, {u32_array_type(4), 4}});
   AddStorageBuffer("foo_sb", foo_control_type.get(), 0, 0);
@@ -1621,8 +1615,8 @@
 }
 
 TEST_F(InspectorGetStorageBufferResourceBindingsTest, ContainingRuntimeArray) {
-  ast::type::Struct* foo_struct_type;
-  std::unique_ptr<ast::type::AccessControl> foo_control_type;
+  type::Struct* foo_struct_type;
+  std::unique_ptr<type::AccessControl> foo_control_type;
   std::tie(foo_struct_type, foo_control_type) =
       MakeStorageBufferTypes("foo_type", {{ty.i32, 0}, {u32_array_type(0), 4}});
   AddStorageBuffer("foo_sb", foo_control_type.get(), 0, 0);
@@ -1650,8 +1644,8 @@
 }
 
 TEST_F(InspectorGetStorageBufferResourceBindingsTest, SkipReadOnly) {
-  ast::type::Struct* foo_struct_type;
-  std::unique_ptr<ast::type::AccessControl> foo_control_type;
+  type::Struct* foo_struct_type;
+  std::unique_ptr<type::AccessControl> foo_control_type;
   std::tie(foo_struct_type, foo_control_type) =
       MakeReadOnlyStorageBufferTypes("foo_type", {{ty.i32, 0}});
   AddStorageBuffer("foo_sb", foo_control_type.get(), 0, 0);
@@ -1675,8 +1669,8 @@
 }
 
 TEST_F(InspectorGetReadOnlyStorageBufferResourceBindingsTest, Simple) {
-  ast::type::Struct* foo_struct_type;
-  std::unique_ptr<ast::type::AccessControl> foo_control_type;
+  type::Struct* foo_struct_type;
+  std::unique_ptr<type::AccessControl> foo_control_type;
   std::tie(foo_struct_type, foo_control_type) =
       MakeReadOnlyStorageBufferTypes("foo_type", {{ty.i32, 0}});
   AddStorageBuffer("foo_sb", foo_control_type.get(), 0, 0);
@@ -1706,8 +1700,8 @@
 
 TEST_F(InspectorGetReadOnlyStorageBufferResourceBindingsTest,
        MultipleStorageBuffers) {
-  ast::type::Struct* sb_struct_type;
-  std::unique_ptr<ast::type::AccessControl> sb_control_type;
+  type::Struct* sb_struct_type;
+  std::unique_ptr<type::AccessControl> sb_control_type;
   std::tie(sb_struct_type, sb_control_type) = MakeReadOnlyStorageBufferTypes(
       "sb_type", {{ty.i32, 0}, {ty.u32, 4}, {ty.f32, 8}});
   AddStorageBuffer("sb_foo", sb_control_type.get(), 0, 0);
@@ -1762,8 +1756,8 @@
 }
 
 TEST_F(InspectorGetReadOnlyStorageBufferResourceBindingsTest, ContainingArray) {
-  ast::type::Struct* foo_struct_type;
-  std::unique_ptr<ast::type::AccessControl> foo_control_type;
+  type::Struct* foo_struct_type;
+  std::unique_ptr<type::AccessControl> foo_control_type;
   std::tie(foo_struct_type, foo_control_type) = MakeReadOnlyStorageBufferTypes(
       "foo_type", {{ty.i32, 0}, {u32_array_type(4), 4}});
   AddStorageBuffer("foo_sb", foo_control_type.get(), 0, 0);
@@ -1793,8 +1787,8 @@
 
 TEST_F(InspectorGetReadOnlyStorageBufferResourceBindingsTest,
        ContainingRuntimeArray) {
-  ast::type::Struct* foo_struct_type;
-  std::unique_ptr<ast::type::AccessControl> foo_control_type;
+  type::Struct* foo_struct_type;
+  std::unique_ptr<type::AccessControl> foo_control_type;
   std::tie(foo_struct_type, foo_control_type) = MakeReadOnlyStorageBufferTypes(
       "foo_type", {{ty.i32, 0}, {u32_array_type(0), 4}});
   AddStorageBuffer("foo_sb", foo_control_type.get(), 0, 0);
@@ -1823,8 +1817,8 @@
 }
 
 TEST_F(InspectorGetReadOnlyStorageBufferResourceBindingsTest, SkipNonReadOnly) {
-  ast::type::Struct* foo_struct_type;
-  std::unique_ptr<ast::type::AccessControl> foo_control_type;
+  type::Struct* foo_struct_type;
+  std::unique_ptr<type::AccessControl> foo_control_type;
   std::tie(foo_struct_type, foo_control_type) =
       MakeStorageBufferTypes("foo_type", {{ty.i32, 0}});
   AddStorageBuffer("foo_sb", foo_control_type.get(), 0, 0);
@@ -1850,7 +1844,7 @@
 
 TEST_F(InspectorGetSamplerResourceBindingsTest, Simple) {
   auto sampled_texture_type =
-      MakeSampledTextureType(ast::type::TextureDimension::k1d, ty.f32);
+      MakeSampledTextureType(type::TextureDimension::k1d, ty.f32);
   AddSampledTexture("foo_texture", sampled_texture_type.get(), 0, 0);
   AddSampler("foo_sampler", 0, 1);
   AddGlobalVariable("foo_coords", ty.f32);
@@ -1889,7 +1883,7 @@
 
 TEST_F(InspectorGetSamplerResourceBindingsTest, InFunction) {
   auto sampled_texture_type =
-      MakeSampledTextureType(ast::type::TextureDimension::k1d, ty.f32);
+      MakeSampledTextureType(type::TextureDimension::k1d, ty.f32);
   AddSampledTexture("foo_texture", sampled_texture_type.get(), 0, 0);
   AddSampler("foo_sampler", 0, 1);
   AddGlobalVariable("foo_coords", ty.f32);
@@ -1917,7 +1911,7 @@
 
 TEST_F(InspectorGetSamplerResourceBindingsTest, UnknownEntryPoint) {
   auto sampled_texture_type =
-      MakeSampledTextureType(ast::type::TextureDimension::k1d, ty.f32);
+      MakeSampledTextureType(type::TextureDimension::k1d, ty.f32);
   AddSampledTexture("foo_texture", sampled_texture_type.get(), 0, 0);
   AddSampler("foo_sampler", 0, 1);
   AddGlobalVariable("foo_coords", ty.f32);
@@ -1936,8 +1930,7 @@
 }
 
 TEST_F(InspectorGetSamplerResourceBindingsTest, SkipsComparisonSamplers) {
-  auto depth_texture_type =
-      MakeDepthTextureType(ast::type::TextureDimension::k2d);
+  auto depth_texture_type = MakeDepthTextureType(type::TextureDimension::k2d);
   AddDepthTexture("foo_texture", depth_texture_type.get());
   AddComparisonSampler("foo_sampler", 0, 1);
   AddGlobalVariable("foo_coords", ty.f32);
@@ -1959,8 +1952,7 @@
 }
 
 TEST_F(InspectorGetComparisonSamplerResourceBindingsTest, Simple) {
-  auto depth_texture_type =
-      MakeDepthTextureType(ast::type::TextureDimension::k2d);
+  auto depth_texture_type = MakeDepthTextureType(type::TextureDimension::k2d);
   AddDepthTexture("foo_texture", depth_texture_type.get());
   AddComparisonSampler("foo_sampler", 0, 1);
   AddGlobalVariable("foo_coords", ty.f32);
@@ -1999,8 +1991,7 @@
 }
 
 TEST_F(InspectorGetComparisonSamplerResourceBindingsTest, InFunction) {
-  auto depth_texture_type =
-      MakeDepthTextureType(ast::type::TextureDimension::k2d);
+  auto depth_texture_type = MakeDepthTextureType(type::TextureDimension::k2d);
   AddDepthTexture("foo_texture", depth_texture_type.get());
   AddComparisonSampler("foo_sampler", 0, 1);
   AddGlobalVariable("foo_coords", ty.f32);
@@ -2029,8 +2020,7 @@
 }
 
 TEST_F(InspectorGetComparisonSamplerResourceBindingsTest, UnknownEntryPoint) {
-  auto depth_texture_type =
-      MakeDepthTextureType(ast::type::TextureDimension::k2d);
+  auto depth_texture_type = MakeDepthTextureType(type::TextureDimension::k2d);
   AddDepthTexture("foo_texture", depth_texture_type.get());
   AddComparisonSampler("foo_sampler", 0, 1);
   AddGlobalVariable("foo_coords", ty.f32);
@@ -2051,7 +2041,7 @@
 
 TEST_F(InspectorGetComparisonSamplerResourceBindingsTest, SkipsSamplers) {
   auto sampled_texture_type =
-      MakeSampledTextureType(ast::type::TextureDimension::k1d, ty.f32);
+      MakeSampledTextureType(type::TextureDimension::k1d, ty.f32);
   AddSampledTexture("foo_texture", sampled_texture_type.get(), 0, 0);
   AddSampler("foo_sampler", 0, 1);
   AddGlobalVariable("foo_coords", ty.f32);
@@ -2125,51 +2115,51 @@
     InspectorGetSampledTextureResourceBindingsTestWithParam,
     testing::Values(
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k1d,
+            type::TextureDimension::k1d,
             inspector::ResourceBinding::TextureDimension::k1d,
             inspector::ResourceBinding::SampledKind::kFloat},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k1d,
+            type::TextureDimension::k1d,
             inspector::ResourceBinding::TextureDimension::k1d,
             inspector::ResourceBinding::SampledKind::kSInt},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k1d,
+            type::TextureDimension::k1d,
             inspector::ResourceBinding::TextureDimension::k1d,
             inspector::ResourceBinding::SampledKind::kUInt},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k2d,
+            type::TextureDimension::k2d,
             inspector::ResourceBinding::TextureDimension::k2d,
             inspector::ResourceBinding::SampledKind::kFloat},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k2d,
+            type::TextureDimension::k2d,
             inspector::ResourceBinding::TextureDimension::k2d,
             inspector::ResourceBinding::SampledKind::kSInt},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k2d,
+            type::TextureDimension::k2d,
             inspector::ResourceBinding::TextureDimension::k2d,
             inspector::ResourceBinding::SampledKind::kUInt},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k3d,
+            type::TextureDimension::k3d,
             inspector::ResourceBinding::TextureDimension::k3d,
             inspector::ResourceBinding::SampledKind::kFloat},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k3d,
+            type::TextureDimension::k3d,
             inspector::ResourceBinding::TextureDimension::k3d,
             inspector::ResourceBinding::SampledKind::kSInt},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k3d,
+            type::TextureDimension::k3d,
             inspector::ResourceBinding::TextureDimension::k3d,
             inspector::ResourceBinding::SampledKind::kUInt},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::kCube,
+            type::TextureDimension::kCube,
             inspector::ResourceBinding::TextureDimension::kCube,
             inspector::ResourceBinding::SampledKind::kFloat},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::kCube,
+            type::TextureDimension::kCube,
             inspector::ResourceBinding::TextureDimension::kCube,
             inspector::ResourceBinding::SampledKind::kSInt},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::kCube,
+            type::TextureDimension::kCube,
             inspector::ResourceBinding::TextureDimension::kCube,
             inspector::ResourceBinding::SampledKind::kUInt}));
 
@@ -2209,39 +2199,39 @@
     InspectorGetSampledArrayTextureResourceBindingsTestWithParam,
     testing::Values(
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k1dArray,
+            type::TextureDimension::k1dArray,
             inspector::ResourceBinding::TextureDimension::k1dArray,
             inspector::ResourceBinding::SampledKind::kFloat},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k1dArray,
+            type::TextureDimension::k1dArray,
             inspector::ResourceBinding::TextureDimension::k1dArray,
             inspector::ResourceBinding::SampledKind::kSInt},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k1dArray,
+            type::TextureDimension::k1dArray,
             inspector::ResourceBinding::TextureDimension::k1dArray,
             inspector::ResourceBinding::SampledKind::kUInt},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k2dArray,
+            type::TextureDimension::k2dArray,
             inspector::ResourceBinding::TextureDimension::k2dArray,
             inspector::ResourceBinding::SampledKind::kFloat},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k2dArray,
+            type::TextureDimension::k2dArray,
             inspector::ResourceBinding::TextureDimension::k2dArray,
             inspector::ResourceBinding::SampledKind::kSInt},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::k2dArray,
+            type::TextureDimension::k2dArray,
             inspector::ResourceBinding::TextureDimension::k2dArray,
             inspector::ResourceBinding::SampledKind::kUInt},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::kCubeArray,
+            type::TextureDimension::kCubeArray,
             inspector::ResourceBinding::TextureDimension::kCubeArray,
             inspector::ResourceBinding::SampledKind::kFloat},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::kCubeArray,
+            type::TextureDimension::kCubeArray,
             inspector::ResourceBinding::TextureDimension::kCubeArray,
             inspector::ResourceBinding::SampledKind::kSInt},
         GetSampledTextureTestParams{
-            ast::type::TextureDimension::kCubeArray,
+            type::TextureDimension::kCubeArray,
             inspector::ResourceBinding::TextureDimension::kCubeArray,
             inspector::ResourceBinding::SampledKind::kUInt}));
 
@@ -2287,27 +2277,27 @@
     InspectorGetMultisampledTextureResourceBindingsTestWithParam,
     testing::Values(
         GetMultisampledTextureTestParams{
-            ast::type::TextureDimension::k1d,
+            type::TextureDimension::k1d,
             inspector::ResourceBinding::TextureDimension::k1d,
             inspector::ResourceBinding::SampledKind::kFloat},
         GetMultisampledTextureTestParams{
-            ast::type::TextureDimension::k1d,
+            type::TextureDimension::k1d,
             inspector::ResourceBinding::TextureDimension::k1d,
             inspector::ResourceBinding::SampledKind::kSInt},
         GetMultisampledTextureTestParams{
-            ast::type::TextureDimension::k1d,
+            type::TextureDimension::k1d,
             inspector::ResourceBinding::TextureDimension::k1d,
             inspector::ResourceBinding::SampledKind::kUInt},
         GetMultisampledTextureTestParams{
-            ast::type::TextureDimension::k2d,
+            type::TextureDimension::k2d,
             inspector::ResourceBinding::TextureDimension::k2d,
             inspector::ResourceBinding::SampledKind::kFloat},
         GetMultisampledTextureTestParams{
-            ast::type::TextureDimension::k2d,
+            type::TextureDimension::k2d,
             inspector::ResourceBinding::TextureDimension::k2d,
             inspector::ResourceBinding::SampledKind::kSInt},
         GetMultisampledTextureTestParams{
-            ast::type::TextureDimension::k2d,
+            type::TextureDimension::k2d,
             inspector::ResourceBinding::TextureDimension::k2d,
             inspector::ResourceBinding::SampledKind::kUInt}));
 
@@ -2360,27 +2350,27 @@
     InspectorGetMultisampledArrayTextureResourceBindingsTestWithParam,
     testing::Values(
         GetMultisampledTextureTestParams{
-            ast::type::TextureDimension::k1dArray,
+            type::TextureDimension::k1dArray,
             inspector::ResourceBinding::TextureDimension::k1dArray,
             inspector::ResourceBinding::SampledKind::kFloat},
         GetMultisampledTextureTestParams{
-            ast::type::TextureDimension::k1dArray,
+            type::TextureDimension::k1dArray,
             inspector::ResourceBinding::TextureDimension::k1dArray,
             inspector::ResourceBinding::SampledKind::kSInt},
         GetMultisampledTextureTestParams{
-            ast::type::TextureDimension::k1dArray,
+            type::TextureDimension::k1dArray,
             inspector::ResourceBinding::TextureDimension::k1dArray,
             inspector::ResourceBinding::SampledKind::kUInt},
         GetMultisampledTextureTestParams{
-            ast::type::TextureDimension::k2dArray,
+            type::TextureDimension::k2dArray,
             inspector::ResourceBinding::TextureDimension::k2dArray,
             inspector::ResourceBinding::SampledKind::kFloat},
         GetMultisampledTextureTestParams{
-            ast::type::TextureDimension::k2dArray,
+            type::TextureDimension::k2dArray,
             inspector::ResourceBinding::TextureDimension::k2dArray,
             inspector::ResourceBinding::SampledKind::kSInt},
         GetMultisampledTextureTestParams{
-            ast::type::TextureDimension::k2dArray,
+            type::TextureDimension::k2dArray,
             inspector::ResourceBinding::TextureDimension::k2dArray,
             inspector::ResourceBinding::SampledKind::kUInt}));
 
diff --git a/src/reader/spirv/enum_converter.cc b/src/reader/spirv/enum_converter.cc
index 8719140..f53c4a6 100644
--- a/src/reader/spirv/enum_converter.cc
+++ b/src/reader/spirv/enum_converter.cc
@@ -94,85 +94,85 @@
   return ast::Builtin::kNone;
 }
 
-ast::type::TextureDimension EnumConverter::ToDim(SpvDim dim, bool arrayed) {
+type::TextureDimension EnumConverter::ToDim(SpvDim dim, bool arrayed) {
   if (arrayed) {
     switch (dim) {
       case SpvDim1D:
-        return ast::type::TextureDimension::k1dArray;
+        return type::TextureDimension::k1dArray;
       case SpvDim2D:
-        return ast::type::TextureDimension::k2dArray;
+        return type::TextureDimension::k2dArray;
       case SpvDimCube:
-        return ast::type::TextureDimension::kCubeArray;
+        return type::TextureDimension::kCubeArray;
       default:
         break;
     }
     Fail() << "arrayed dimension must be 1D, 2D, or Cube. Got " << int(dim);
-    return ast::type::TextureDimension::kNone;
+    return type::TextureDimension::kNone;
   }
   // Assume non-arrayed
   switch (dim) {
     case SpvDim1D:
-      return ast::type::TextureDimension::k1d;
+      return type::TextureDimension::k1d;
     case SpvDim2D:
-      return ast::type::TextureDimension::k2d;
+      return type::TextureDimension::k2d;
     case SpvDim3D:
-      return ast::type::TextureDimension::k3d;
+      return type::TextureDimension::k3d;
     case SpvDimCube:
-      return ast::type::TextureDimension::kCube;
+      return type::TextureDimension::kCube;
     default:
       break;
   }
   Fail() << "invalid dimension: " << int(dim);
-  return ast::type::TextureDimension::kNone;
+  return type::TextureDimension::kNone;
 }
 
-ast::type::ImageFormat EnumConverter::ToImageFormat(SpvImageFormat fmt) {
+type::ImageFormat EnumConverter::ToImageFormat(SpvImageFormat fmt) {
   switch (fmt) {
     case SpvImageFormatUnknown:
-      return ast::type::ImageFormat::kNone;
+      return type::ImageFormat::kNone;
 
     // 8 bit channels
     case SpvImageFormatRgba8:
-      return ast::type::ImageFormat::kRgba8Unorm;
+      return type::ImageFormat::kRgba8Unorm;
     case SpvImageFormatRgba8Snorm:
-      return ast::type::ImageFormat::kRgba8Snorm;
+      return type::ImageFormat::kRgba8Snorm;
     case SpvImageFormatRgba8ui:
-      return ast::type::ImageFormat::kRgba8Uint;
+      return type::ImageFormat::kRgba8Uint;
     case SpvImageFormatRgba8i:
-      return ast::type::ImageFormat::kRgba8Sint;
+      return type::ImageFormat::kRgba8Sint;
 
     // 16 bit channels
     case SpvImageFormatRgba16ui:
-      return ast::type::ImageFormat::kRgba16Uint;
+      return type::ImageFormat::kRgba16Uint;
     case SpvImageFormatRgba16i:
-      return ast::type::ImageFormat::kRgba16Sint;
+      return type::ImageFormat::kRgba16Sint;
     case SpvImageFormatRgba16f:
-      return ast::type::ImageFormat::kRgba16Float;
+      return type::ImageFormat::kRgba16Float;
 
     // 32 bit channels
     case SpvImageFormatR32ui:
-      return ast::type::ImageFormat::kR32Uint;
+      return type::ImageFormat::kR32Uint;
     case SpvImageFormatR32i:
-      return ast::type::ImageFormat::kR32Sint;
+      return type::ImageFormat::kR32Sint;
     case SpvImageFormatR32f:
-      return ast::type::ImageFormat::kR32Float;
+      return type::ImageFormat::kR32Float;
     case SpvImageFormatRg32ui:
-      return ast::type::ImageFormat::kRg32Uint;
+      return type::ImageFormat::kRg32Uint;
     case SpvImageFormatRg32i:
-      return ast::type::ImageFormat::kRg32Sint;
+      return type::ImageFormat::kRg32Sint;
     case SpvImageFormatRg32f:
-      return ast::type::ImageFormat::kRg32Float;
+      return type::ImageFormat::kRg32Float;
     case SpvImageFormatRgba32ui:
-      return ast::type::ImageFormat::kRgba32Uint;
+      return type::ImageFormat::kRgba32Uint;
     case SpvImageFormatRgba32i:
-      return ast::type::ImageFormat::kRgba32Sint;
+      return type::ImageFormat::kRgba32Sint;
     case SpvImageFormatRgba32f:
-      return ast::type::ImageFormat::kRgba32Float;
+      return type::ImageFormat::kRgba32Float;
     default:
       break;
   }
   Fail() << "invalid image format: " << int(fmt);
-  return ast::type::ImageFormat::kNone;
+  return type::ImageFormat::kNone;
 }
 
 }  // namespace spirv
diff --git a/src/reader/spirv/enum_converter.h b/src/reader/spirv/enum_converter.h
index fdcef1f..59c7d04 100644
--- a/src/reader/spirv/enum_converter.h
+++ b/src/reader/spirv/enum_converter.h
@@ -19,8 +19,8 @@
 #include "src/ast/builtin.h"
 #include "src/ast/pipeline_stage.h"
 #include "src/ast/storage_class.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/texture_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/texture_type.h"
 #include "src/reader/spirv/fail_stream.h"
 
 namespace tint {
@@ -59,13 +59,13 @@
   /// @param dim the SPIR-V Dim value
   /// @param arrayed true if the texture is arrayed
   /// @returns a Tint AST texture dimension
-  ast::type::TextureDimension ToDim(SpvDim dim, bool arrayed);
+  type::TextureDimension ToDim(SpvDim dim, bool arrayed);
 
   /// Converts a SPIR-V Image Format to a Tint ImageFormat
   /// On failure, logs an error and returns kNone
   /// @param fmt the SPIR-V format
   /// @returns a Tint AST format
-  ast::type::ImageFormat ToImageFormat(SpvImageFormat fmt);
+  type::ImageFormat ToImageFormat(SpvImageFormat fmt);
 
  private:
   /// Registers a failure and returns a stream for log diagnostics.
diff --git a/src/reader/spirv/enum_converter_test.cc b/src/reader/spirv/enum_converter_test.cc
index bf4c5c0..ad8adc1 100644
--- a/src/reader/spirv/enum_converter_test.cc
+++ b/src/reader/spirv/enum_converter_test.cc
@@ -236,7 +236,7 @@
   SpvDim dim;
   bool arrayed;
   bool expect_success;
-  ast::type::TextureDimension expected;
+  type::TextureDimension expected;
 };
 inline std::ostream& operator<<(std::ostream& out, DimCase dc) {
   out << "DimCase{ SpvDim:" << int(dc.dim) << " arrayed?:" << int(dc.arrayed)
@@ -280,41 +280,39 @@
     SpvDimTest,
     testing::Values(
         // Non-arrayed
-        DimCase{SpvDim1D, false, true, ast::type::TextureDimension::k1d},
-        DimCase{SpvDim2D, false, true, ast::type::TextureDimension::k2d},
-        DimCase{SpvDim3D, false, true, ast::type::TextureDimension::k3d},
-        DimCase{SpvDimCube, false, true, ast::type::TextureDimension::kCube},
+        DimCase{SpvDim1D, false, true, type::TextureDimension::k1d},
+        DimCase{SpvDim2D, false, true, type::TextureDimension::k2d},
+        DimCase{SpvDim3D, false, true, type::TextureDimension::k3d},
+        DimCase{SpvDimCube, false, true, type::TextureDimension::kCube},
         // Arrayed
-        DimCase{SpvDim1D, true, true, ast::type::TextureDimension::k1dArray},
-        DimCase{SpvDim2D, true, true, ast::type::TextureDimension::k2dArray},
-        DimCase{SpvDimCube, true, true,
-                ast::type::TextureDimension::kCubeArray}));
+        DimCase{SpvDim1D, true, true, type::TextureDimension::k1dArray},
+        DimCase{SpvDim2D, true, true, type::TextureDimension::k2dArray},
+        DimCase{SpvDimCube, true, true, type::TextureDimension::kCubeArray}));
 
 INSTANTIATE_TEST_SUITE_P(
     EnumConverterBad,
     SpvDimTest,
     testing::Values(
         // Invalid SPIR-V dimensionality.
-        DimCase{SpvDimMax, false, false, ast::type::TextureDimension::kNone},
-        DimCase{SpvDimMax, true, false, ast::type::TextureDimension::kNone},
+        DimCase{SpvDimMax, false, false, type::TextureDimension::kNone},
+        DimCase{SpvDimMax, true, false, type::TextureDimension::kNone},
         // Vulkan non-arrayed dimensionalities not supported by WGSL.
-        DimCase{SpvDimRect, false, false, ast::type::TextureDimension::kNone},
-        DimCase{SpvDimBuffer, false, false, ast::type::TextureDimension::kNone},
-        DimCase{SpvDimSubpassData, false, false,
-                ast::type::TextureDimension::kNone},
+        DimCase{SpvDimRect, false, false, type::TextureDimension::kNone},
+        DimCase{SpvDimBuffer, false, false, type::TextureDimension::kNone},
+        DimCase{SpvDimSubpassData, false, false, type::TextureDimension::kNone},
         // Arrayed dimensionalities not supported by WGSL
-        DimCase{SpvDim3D, true, false, ast::type::TextureDimension::kNone},
-        DimCase{SpvDimRect, true, false, ast::type::TextureDimension::kNone},
-        DimCase{SpvDimBuffer, true, false, ast::type::TextureDimension::kNone},
+        DimCase{SpvDim3D, true, false, type::TextureDimension::kNone},
+        DimCase{SpvDimRect, true, false, type::TextureDimension::kNone},
+        DimCase{SpvDimBuffer, true, false, type::TextureDimension::kNone},
         DimCase{SpvDimSubpassData, true, false,
-                ast::type::TextureDimension::kNone}));
+                type::TextureDimension::kNone}));
 
 // ImageFormat
 
 struct ImageFormatCase {
   SpvImageFormat format;
   bool expect_success;
-  ast::type::ImageFormat expected;
+  type::ImageFormat expected;
 };
 inline std::ostream& operator<<(std::ostream& out, ImageFormatCase ifc) {
   out << "ImageFormatCase{ SpvImageFormat:" << int(ifc.format)
@@ -358,85 +356,70 @@
     SpvImageFormatTest,
     testing::Values(
         // Unknown.  This is used for sampled images.
-        ImageFormatCase{SpvImageFormatUnknown, true,
-                        ast::type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatUnknown, true, type::ImageFormat::kNone},
         // 8 bit channels
         ImageFormatCase{SpvImageFormatRgba8, true,
-                        ast::type::ImageFormat::kRgba8Unorm},
+                        type::ImageFormat::kRgba8Unorm},
         ImageFormatCase{SpvImageFormatRgba8Snorm, true,
-                        ast::type::ImageFormat::kRgba8Snorm},
+                        type::ImageFormat::kRgba8Snorm},
         ImageFormatCase{SpvImageFormatRgba8ui, true,
-                        ast::type::ImageFormat::kRgba8Uint},
+                        type::ImageFormat::kRgba8Uint},
         ImageFormatCase{SpvImageFormatRgba8i, true,
-                        ast::type::ImageFormat::kRgba8Sint},
+                        type::ImageFormat::kRgba8Sint},
         // 16 bit channels
         ImageFormatCase{SpvImageFormatRgba16ui, true,
-                        ast::type::ImageFormat::kRgba16Uint},
+                        type::ImageFormat::kRgba16Uint},
         ImageFormatCase{SpvImageFormatRgba16i, true,
-                        ast::type::ImageFormat::kRgba16Sint},
+                        type::ImageFormat::kRgba16Sint},
         ImageFormatCase{SpvImageFormatRgba16f, true,
-                        ast::type::ImageFormat::kRgba16Float},
+                        type::ImageFormat::kRgba16Float},
         // 32 bit channels
         // ... 1 channel
-        ImageFormatCase{SpvImageFormatR32ui, true,
-                        ast::type::ImageFormat::kR32Uint},
-        ImageFormatCase{SpvImageFormatR32i, true,
-                        ast::type::ImageFormat::kR32Sint},
-        ImageFormatCase{SpvImageFormatR32f, true,
-                        ast::type::ImageFormat::kR32Float},
+        ImageFormatCase{SpvImageFormatR32ui, true, type::ImageFormat::kR32Uint},
+        ImageFormatCase{SpvImageFormatR32i, true, type::ImageFormat::kR32Sint},
+        ImageFormatCase{SpvImageFormatR32f, true, type::ImageFormat::kR32Float},
         // ... 2 channels
         ImageFormatCase{SpvImageFormatRg32ui, true,
-                        ast::type::ImageFormat::kRg32Uint},
+                        type::ImageFormat::kRg32Uint},
         ImageFormatCase{SpvImageFormatRg32i, true,
-                        ast::type::ImageFormat::kRg32Sint},
+                        type::ImageFormat::kRg32Sint},
         ImageFormatCase{SpvImageFormatRg32f, true,
-                        ast::type::ImageFormat::kRg32Float},
+                        type::ImageFormat::kRg32Float},
         // ... 4 channels
         ImageFormatCase{SpvImageFormatRgba32ui, true,
-                        ast::type::ImageFormat::kRgba32Uint},
+                        type::ImageFormat::kRgba32Uint},
         ImageFormatCase{SpvImageFormatRgba32i, true,
-                        ast::type::ImageFormat::kRgba32Sint},
+                        type::ImageFormat::kRgba32Sint},
         ImageFormatCase{SpvImageFormatRgba32f, true,
-                        ast::type::ImageFormat::kRgba32Float}));
+                        type::ImageFormat::kRgba32Float}));
 
-INSTANTIATE_TEST_SUITE_P(EnumConverterBad,
-                         SpvImageFormatTest,
-                         testing::Values(
-                             // Scanning in order from the SPIR-V spec.
-                             ImageFormatCase{SpvImageFormatRg16f, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatR11fG11fB10f, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatR16f, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatRgb10A2, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatRg16, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatRg8, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatR16, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatR8, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatRgba16Snorm, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatRg16Snorm, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatRg8Snorm, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatRg16i, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatRg8i, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatR8i, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatRgb10a2ui, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatRg16ui, false,
-                                             ast::type::ImageFormat::kNone},
-                             ImageFormatCase{SpvImageFormatRg8ui, false,
-                                             ast::type::ImageFormat::kNone}));
+INSTANTIATE_TEST_SUITE_P(
+    EnumConverterBad,
+    SpvImageFormatTest,
+    testing::Values(
+        // Scanning in order from the SPIR-V spec.
+        ImageFormatCase{SpvImageFormatRg16f, false, type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatR11fG11fB10f, false,
+                        type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatR16f, false, type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatRgb10A2, false, type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatRg16, false, type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatRg8, false, type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatR16, false, type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatR8, false, type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatRgba16Snorm, false,
+                        type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatRg16Snorm, false,
+                        type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatRg8Snorm, false,
+                        type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatRg16i, false, type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatRg8i, false, type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatR8i, false, type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatRgb10a2ui, false,
+                        type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatRg16ui, false, type::ImageFormat::kNone},
+        ImageFormatCase{SpvImageFormatRg8ui, false, type::ImageFormat::kNone}));
 
 }  // namespace
 }  // namespace spirv
diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc
index af6e3b5..a18127f 100644
--- a/src/reader/spirv/function.cc
+++ b/src/reader/spirv/function.cc
@@ -53,18 +53,6 @@
 #include "src/ast/stage_decoration.h"
 #include "src/ast/storage_class.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/unary_op.h"
@@ -74,6 +62,18 @@
 #include "src/reader/spirv/construct.h"
 #include "src/reader/spirv/fail_stream.h"
 #include "src/reader/spirv/parser_impl.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/texture_type.h"
+#include "src/type/type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 
 // Terms:
 //    CFG: the control flow graph of the function, where basic blocks are the
@@ -725,7 +725,7 @@
       fail_stream_(pi->fail_stream()),
       namer_(pi->namer()),
       function_(function),
-      i32_(ast_module_.create<ast::type::I32>()),
+      i32_(ast_module_.create<type::I32>()),
       ep_info_(ep_info) {
   PushNewStatementBlock(nullptr, 0, nullptr);
 }
@@ -929,7 +929,7 @@
   return success();
 }
 
-ast::type::Type* FunctionEmitter::GetVariableStoreType(
+type::Type* FunctionEmitter::GetVariableStoreType(
     const spvtools::opt::Instruction& var_decl_inst) {
   const auto type_id = var_decl_inst.type_id();
   auto* var_ref_type = type_mgr_->GetType(type_id);
@@ -1998,7 +1998,7 @@
              << id;
       return {};
     case SkipReason::kPointSizeBuiltinValue: {
-      auto* f32 = create<ast::type::F32>();
+      auto* f32 = create<type::F32>();
       return {f32,
               create<ast::ScalarConstructorExpression>(
                   Source{}, create<ast::FloatLiteral>(Source{}, f32, 1.0f))};
@@ -2985,8 +2985,8 @@
       }
       auto expr = MakeExpression(ptr_id);
       // The load result type is the pointee type of its operand.
-      assert(expr.type->Is<ast::type::Pointer>());
-      expr.type = expr.type->As<ast::type::Pointer>()->type();
+      assert(expr.type->Is<type::Pointer>());
+      expr.type = expr.type->As<type::Pointer>()->type();
       return EmitConstDefOrWriteToHoistedVar(inst, expr);
     }
 
@@ -3043,7 +3043,7 @@
 
   const auto opcode = inst.opcode();
 
-  ast::type::Type* ast_type =
+  type::Type* ast_type =
       inst.type_id() != 0 ? parser_impl_.ConvertType(inst.type_id()) : nullptr;
 
   auto binary_op = ConvertBinaryOp(opcode);
@@ -3181,7 +3181,7 @@
   auto* func = create<ast::IdentifierExpression>(
       Source{}, ast_module_.RegisterSymbol(name));
   ast::ExpressionList operands;
-  ast::type::Type* first_operand_type = nullptr;
+  type::Type* first_operand_type = nullptr;
   // All parameters to GLSL.std.450 extended instructions are IDs.
   for (uint32_t iarg = 2; iarg < inst.NumInOperands(); ++iarg) {
     TypedExpression operand = MakeOperand(inst, iarg);
@@ -3423,7 +3423,7 @@
         type_mgr_->FindPointerToType(pointee_type_id, storage_class);
     auto* ast_pointer_type = parser_impl_.ConvertType(pointer_type_id);
     assert(ast_pointer_type);
-    assert(ast_pointer_type->Is<ast::type::Pointer>());
+    assert(ast_pointer_type->Is<type::Pointer>());
     current_expr = TypedExpression{ast_pointer_type, next_expr};
   }
   return current_expr;
@@ -3443,7 +3443,7 @@
   TypedExpression current_expr(MakeOperand(inst, 0));
 
   auto make_index = [this, source](uint32_t literal) {
-    auto* type = create<ast::type::U32>();
+    auto* type = create<type::U32>();
     return create<ast::ScalarConstructorExpression>(
         source, create<ast::UintLiteral>(source, type, literal));
   };
@@ -3551,7 +3551,7 @@
 }
 
 ast::Expression* FunctionEmitter::MakeFalse(const Source& source) const {
-  ast::type::Bool bool_type;
+  type::Bool bool_type;
   return create<ast::ScalarConstructorExpression>(
       source, create<ast::BoolLiteral>(source, parser_impl_.Bool(), false));
 }
@@ -3572,8 +3572,8 @@
   // Generate an ast::TypeConstructor expression.
   // Assume the literal indices are valid, and there is a valid number of them.
   auto source = GetSourceForInst(inst);
-  ast::type::Vector* result_type =
-      parser_impl_.ConvertType(inst.type_id())->As<ast::type::Vector>();
+  type::Vector* result_type =
+      parser_impl_.ConvertType(inst.type_id())->As<type::Vector>();
   ast::ExpressionList values;
   for (uint32_t i = 2; i < inst.NumInOperands(); ++i) {
     const auto index = inst.GetSingleWordInOperand(i);
@@ -3642,7 +3642,7 @@
       if (type) {
         if (type->AsPointer()) {
           if (const auto* ast_type = parser_impl_.ConvertType(inst.type_id())) {
-            if (auto* ptr = ast_type->As<ast::type::Pointer>()) {
+            if (auto* ptr = ast_type->As<type::Pointer>()) {
               info->storage_class = ptr->storage_class();
             }
           }
@@ -3686,21 +3686,21 @@
   const auto type_id = def_use_mgr_->GetDef(id)->type_id();
   if (type_id) {
     auto* ast_type = parser_impl_.ConvertType(type_id);
-    if (ast_type && ast_type->Is<ast::type::Pointer>()) {
-      return ast_type->As<ast::type::Pointer>()->storage_class();
+    if (ast_type && ast_type->Is<type::Pointer>()) {
+      return ast_type->As<type::Pointer>()->storage_class();
     }
   }
   return ast::StorageClass::kNone;
 }
 
-ast::type::Type* FunctionEmitter::RemapStorageClass(ast::type::Type* type,
-                                                    uint32_t result_id) {
-  if (const auto* ast_ptr_type = type->As<ast::type::Pointer>()) {
+type::Type* FunctionEmitter::RemapStorageClass(type::Type* type,
+                                               uint32_t result_id) {
+  if (const auto* ast_ptr_type = type->As<type::Pointer>()) {
     // Remap an old-style storage buffer pointer to a new-style storage
     // buffer pointer.
     const auto sc = GetStorageClassForPointerValue(result_id);
     if (ast_ptr_type->storage_class() != sc) {
-      return parser_impl_.get_module().create<ast::type::Pointer>(
+      return parser_impl_.get_module().create<type::Pointer>(
           ast_ptr_type->type(), sc);
     }
   }
@@ -3884,7 +3884,7 @@
     return {};
   }
 
-  ast::type::Type* expr_type = nullptr;
+  type::Type* expr_type = nullptr;
   if ((opcode == SpvOpConvertSToF) || (opcode == SpvOpConvertUToF)) {
     if (arg_expr.type->is_integer_scalar_or_vector()) {
       expr_type = requested_type;
@@ -3946,7 +3946,7 @@
                   << inst.PrettyPrint();
   }
 
-  if (result_type->Is<ast::type::Void>()) {
+  if (result_type->Is<type::Void>()) {
     return nullptr !=
            AddStatement(create<ast::CallStatement>(Source{}, call_expr));
   }
@@ -3965,7 +3965,7 @@
   ident->set_intrinsic(intrinsic);
 
   ast::ExpressionList params;
-  ast::type::Type* first_operand_type = nullptr;
+  type::Type* first_operand_type = nullptr;
   for (uint32_t iarg = 0; iarg < inst.NumInOperands(); ++iarg) {
     TypedExpression operand = MakeOperand(inst, iarg);
     if (first_operand_type == nullptr) {
@@ -3997,8 +3997,8 @@
   // - you can't select over pointers or pointer vectors, unless you also have
   //   a VariablePointers* capability, which is not allowed in by WebGPU.
   auto* op_ty = operand1.type;
-  if (op_ty->Is<ast::type::Vector>() || op_ty->is_float_scalar() ||
-      op_ty->is_integer_scalar() || op_ty->Is<ast::type::Bool>()) {
+  if (op_ty->Is<type::Vector>() || op_ty->is_float_scalar() ||
+      op_ty->is_integer_scalar() || op_ty->Is<type::Bool>()) {
     ast::ExpressionList params;
     params.push_back(operand1.expr);
     params.push_back(operand2.expr);
@@ -4050,13 +4050,12 @@
         Source{}, ast_module_.RegisterSymbol(param_name)));
   }
 
-  ast::type::Pointer* texture_ptr_type =
-      parser_impl_.GetTypeForHandleVar(*image);
+  type::Pointer* texture_ptr_type = parser_impl_.GetTypeForHandleVar(*image);
   if (!texture_ptr_type) {
     return Fail();
   }
-  ast::type::Texture* texture_type =
-      texture_ptr_type->type()->UnwrapAll()->As<ast::type::Texture>();
+  type::Texture* texture_type =
+      texture_ptr_type->type()->UnwrapAll()->As<type::Texture>();
   if (!texture_type) {
     return Fail();
   }
@@ -4160,7 +4159,7 @@
     }
     TypedExpression lod = MakeOperand(inst, arg_index);
     // When sampling from a depth texture, the Lod operand must be an I32.
-    if (texture_type->Is<ast::type::DepthTexture>()) {
+    if (texture_type->Is<type::DepthTexture>()) {
       // Convert it to a signed integer type.
       lod = ToI32(lod);
     }
@@ -4188,9 +4187,9 @@
                     << inst.PrettyPrint();
     }
     switch (texture_type->dim()) {
-      case ast::type::TextureDimension::k2d:
-      case ast::type::TextureDimension::k2dArray:
-      case ast::type::TextureDimension::k3d:
+      case type::TextureDimension::k2d:
+      case type::TextureDimension::k2dArray:
+      case type::TextureDimension::k3d:
         break;
       default:
         return Fail() << "ConstOffset is only permitted for 2D, 2D Arrayed, "
@@ -4226,7 +4225,7 @@
     // The result type, derived from the SPIR-V instruction.
     auto* result_type = parser_impl_.ConvertType(inst.type_id());
     auto* result_component_type = result_type;
-    if (auto* result_vector_type = result_type->As<ast::type::Vector>()) {
+    if (auto* result_vector_type = result_type->As<type::Vector>()) {
       result_component_type = result_vector_type->type();
     }
 
@@ -4241,7 +4240,7 @@
     //   dref gather         vec4  ImageFetch           vec4 TODO(dneto)
     // Construct a 4-element vector with the result from the builtin in the
     // first component.
-    if (texture_type->Is<ast::type::DepthTexture>()) {
+    if (texture_type->Is<type::DepthTexture>()) {
       if (is_non_dref_sample || (opcode == SpvOpImageFetch)) {
         value = create<ast::TypeConstructorExpression>(
             Source{},
@@ -4269,7 +4268,7 @@
       // or vice versa. Perform a bitcast.
       value = create<ast::BitcastExpression>(Source{}, result_type, call_expr);
     }
-    if (!expected_component_type->Is<ast::type::F32>() &&
+    if (!expected_component_type->Is<type::F32>() &&
         IsSampledImageAccess(opcode)) {
       // WGSL permits sampled image access only on float textures.
       // Reject this case in the SPIR-V reader, at least until SPIR-V validation
@@ -4326,22 +4325,21 @@
   if (!raw_coords.type) {
     return {};
   }
-  ast::type::Pointer* type = parser_impl_.GetTypeForHandleVar(*image);
+  type::Pointer* type = parser_impl_.GetTypeForHandleVar(*image);
   if (!parser_impl_.success()) {
     Fail();
     return {};
   }
-  if (!type || !type->type()->UnwrapAll()->Is<ast::type::Texture>()) {
+  if (!type || !type->type()->UnwrapAll()->Is<type::Texture>()) {
     Fail() << "invalid texture type for " << image->PrettyPrint();
     return {};
   }
 
   auto* unwrapped_type = type->type()->UnwrapAll();
-  ast::type::TextureDimension dim =
-      unwrapped_type->As<ast::type::Texture>()->dim();
+  type::TextureDimension dim = unwrapped_type->As<type::Texture>()->dim();
   // Number of regular coordinates.
-  uint32_t num_axes = ast::type::NumCoordinateAxes(dim);
-  bool is_arrayed = ast::type::IsTextureArray(dim);
+  uint32_t num_axes = type::NumCoordinateAxes(dim);
+  bool is_arrayed = type::IsTextureArray(dim);
   if ((num_axes == 0) || (num_axes > 3)) {
     Fail() << "unsupported image dimensionality for " << type->type_name()
            << " prompted by " << inst.PrettyPrint();
@@ -4352,7 +4350,7 @@
   if (component_type->is_float_scalar() ||
       component_type->is_integer_scalar()) {
     num_coords_supplied = 1;
-  } else if (auto* vec_type = raw_coords.type->As<ast::type::Vector>()) {
+  } else if (auto* vec_type = raw_coords.type->As<type::Vector>()) {
     component_type = vec_type->type();
     num_coords_supplied = vec_type->size();
   }
@@ -4377,9 +4375,9 @@
   // will actually use them.
   auto prefix_swizzle_expr = [this, num_axes, component_type,
                               raw_coords]() -> ast::Expression* {
-    auto* swizzle_type =
-        (num_axes == 1) ? component_type
-                        : create<ast::type::Vector>(component_type, num_axes);
+    auto* swizzle_type = (num_axes == 1)
+                             ? component_type
+                             : create<type::Vector>(component_type, num_axes);
     auto* swizzle = create<ast::MemberAccessorExpression>(
         Source{}, raw_coords.expr, PrefixSwizzle(num_axes));
     return ToSignedIfUnsigned({swizzle_type, swizzle}).expr;
@@ -4413,8 +4411,8 @@
 ast::Expression* FunctionEmitter::ConvertTexelForStorage(
     const spvtools::opt::Instruction& inst,
     TypedExpression texel,
-    ast::type::Texture* texture_type) {
-  auto* storage_texture_type = texture_type->As<ast::type::StorageTexture>();
+    type::Texture* texture_type) {
+  auto* storage_texture_type = texture_type->As<type::StorageTexture>();
   auto* src_type = texel.type;
   if (!storage_texture_type) {
     Fail() << "writing to other than storage texture: " << inst.PrettyPrint();
@@ -4431,14 +4429,14 @@
   }
 
   const uint32_t dest_count =
-      dest_type->is_scalar() ? 1 : dest_type->As<ast::type::Vector>()->size();
+      dest_type->is_scalar() ? 1 : dest_type->As<type::Vector>()->size();
   if (dest_count == 3) {
     Fail() << "3-channel storage textures are not supported: "
            << inst.PrettyPrint();
     return nullptr;
   }
   const uint32_t src_count =
-      src_type->is_scalar() ? 1 : src_type->As<ast::type::Vector>()->size();
+      src_type->is_scalar() ? 1 : src_type->As<type::Vector>()->size();
   if (src_count < dest_count) {
     Fail() << "texel has too few components for storage texture: " << src_count
            << " provided but " << dest_count
@@ -4508,8 +4506,8 @@
   if (!value.type || !value.type->is_unsigned_scalar_or_vector()) {
     return value;
   }
-  if (auto* vec_type = value.type->As<ast::type::Vector>()) {
-    auto* new_type = create<ast::type::Vector>(i32_, vec_type->size());
+  if (auto* vec_type = value.type->As<type::Vector>()) {
+    auto* new_type = create<type::Vector>(i32_, vec_type->size());
     return {new_type, create<ast::TypeConstructorExpression>(
                           Source{}, new_type, ast::ExpressionList{value.expr})};
   }
@@ -4560,10 +4558,10 @@
   // Synthesize the result.
   auto col = MakeOperand(inst, 0);
   auto row = MakeOperand(inst, 1);
-  auto* col_ty = col.type->As<ast::type::Vector>();
-  auto* row_ty = row.type->As<ast::type::Vector>();
+  auto* col_ty = col.type->As<type::Vector>();
+  auto* row_ty = row.type->As<type::Vector>();
   auto* result_ty =
-      parser_impl_.ConvertType(inst.type_id())->As<ast::type::Matrix>();
+      parser_impl_.ConvertType(inst.type_id())->As<type::Matrix>();
   if (!col_ty || !col_ty || !result_ty || result_ty->type() != col_ty->type() ||
       result_ty->type() != row_ty->type() ||
       result_ty->columns() != row_ty->size() ||
diff --git a/src/reader/spirv/function.h b/src/reader/spirv/function.h
index 74dc3ca..6ea6e36 100644
--- a/src/reader/spirv/function.h
+++ b/src/reader/spirv/function.h
@@ -36,12 +36,12 @@
 #include "src/ast/module.h"
 #include "src/ast/statement.h"
 #include "src/ast/storage_class.h"
-#include "src/ast/type/i32_type.h"
 #include "src/reader/spirv/construct.h"
 #include "src/reader/spirv/entry_point_info.h"
 #include "src/reader/spirv/fail_stream.h"
 #include "src/reader/spirv/namer.h"
 #include "src/reader/spirv/parser_impl.h"
+#include "src/type/i32_type.h"
 
 namespace tint {
 namespace reader {
@@ -485,7 +485,7 @@
   /// @param type the AST type
   /// @param result_id the SPIR-V ID for the locally defined value
   /// @returns an possibly updated type
-  ast::type::Type* RemapStorageClass(ast::type::Type* type, uint32_t result_id);
+  type::Type* RemapStorageClass(type::Type* type, uint32_t result_id);
 
   /// Marks locally defined values when they should get a 'const'
   /// definition in WGSL, or a 'var' definition at an outer scope.
@@ -804,7 +804,7 @@
     /// Function parameters
     ast::VariableList params;
     /// Function return type
-    ast::type::Type* return_type;
+    type::Type* return_type;
     /// Function decorations
     ast::FunctionDecorationList decorations;
   };
@@ -817,7 +817,7 @@
 
   /// @returns the store type for the OpVariable instruction, or
   /// null on failure.
-  ast::type::Type* GetVariableStoreType(
+  type::Type* GetVariableStoreType(
       const spvtools::opt::Instruction& var_decl_inst);
 
   /// Returns an expression for an instruction operand. Signedness conversion is
@@ -874,7 +874,7 @@
   ast::Expression* ConvertTexelForStorage(
       const spvtools::opt::Instruction& inst,
       TypedExpression texel,
-      ast::type::Texture* texture_type);
+      type::Texture* texture_type);
 
   /// Returns an expression for an OpSelect, if its operands are scalars
   /// or vectors. These translate directly to WGSL select.  Otherwise, return
@@ -1037,7 +1037,7 @@
   FailStream& fail_stream_;
   Namer& namer_;
   const spvtools::opt::Function& function_;
-  ast::type::I32* const i32_;  // The unique I32 type object.
+  type::I32* const i32_;  // The unique I32 type object.
 
   // A stack of statement lists. Each list is contained in a construct in
   // the next deeper element of stack. The 0th entry represents the statements
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index a9b7281..5a3a1d9 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -52,24 +52,6 @@
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_decoration.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/unary_op_expression.h"
@@ -79,6 +61,24 @@
 #include "src/reader/spirv/enum_converter.h"
 #include "src/reader/spirv/function.h"
 #include "src/reader/spirv/usage.h"
+#include "src/type/access_control_type.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 
 namespace tint {
 namespace reader {
@@ -255,7 +255,7 @@
     : Reader(),
       spv_binary_(spv_binary),
       fail_stream_(&success_, &errors_),
-      bool_type_(ast_module_.create<ast::type::Bool>()),
+      bool_type_(ast_module_.create<type::Bool>()),
       namer_(fail_stream_),
       enum_converter_(fail_stream_),
       tools_context_(kInputEnv) {
@@ -313,7 +313,7 @@
   return std::move(ast_module_);
 }
 
-ast::type::Type* ParserImpl::ConvertType(uint32_t type_id) {
+type::Type* ParserImpl::ConvertType(uint32_t type_id) {
   if (!success_) {
     return nullptr;
   }
@@ -334,7 +334,7 @@
     return nullptr;
   }
 
-  auto save = [this, type_id, spirv_type](ast::type::Type* type) {
+  auto save = [this, type_id, spirv_type](type::Type* type) {
     if (type != nullptr) {
       id_to_type_[type_id] = type;
       MaybeGenerateAlias(type_id, spirv_type);
@@ -344,7 +344,7 @@
 
   switch (spirv_type->kind()) {
     case spvtools::opt::analysis::Type::kVoid:
-      return save(ast_module_.create<ast::type::Void>());
+      return save(ast_module_.create<type::Void>());
     case spvtools::opt::analysis::Type::kBool:
       return save(bool_type_);
     case spvtools::opt::analysis::Type::kInteger:
@@ -374,7 +374,7 @@
     case spvtools::opt::analysis::Type::kImage:
       // Fake it for sampler and texture types.  These are handled in an
       // entirely different way.
-      return save(ast_module_.create<ast::type::Void>());
+      return save(ast_module_.create<type::Void>());
     default:
       break;
   }
@@ -710,11 +710,11 @@
   return success_;
 }
 
-ast::type::Type* ParserImpl::ConvertType(
+type::Type* ParserImpl::ConvertType(
     const spvtools::opt::analysis::Integer* int_ty) {
   if (int_ty->width() == 32) {
-    ast::type::Type* signed_ty = ast_module_.create<ast::type::I32>();
-    ast::type::Type* unsigned_ty = ast_module_.create<ast::type::U32>();
+    type::Type* signed_ty = ast_module_.create<type::I32>();
+    type::Type* unsigned_ty = ast_module_.create<type::U32>();
     signed_type_for_[unsigned_ty] = signed_ty;
     unsigned_type_for_[signed_ty] = unsigned_ty;
     return int_ty->IsSigned() ? signed_ty : unsigned_ty;
@@ -723,31 +723,31 @@
   return nullptr;
 }
 
-ast::type::Type* ParserImpl::ConvertType(
+type::Type* ParserImpl::ConvertType(
     const spvtools::opt::analysis::Float* float_ty) {
   if (float_ty->width() == 32) {
-    return ast_module_.create<ast::type::F32>();
+    return ast_module_.create<type::F32>();
   }
   Fail() << "unhandled float width: " << float_ty->width();
   return nullptr;
 }
 
-ast::type::Type* ParserImpl::ConvertType(
+type::Type* ParserImpl::ConvertType(
     const spvtools::opt::analysis::Vector* vec_ty) {
   const auto num_elem = vec_ty->element_count();
   auto* ast_elem_ty = ConvertType(type_mgr_->GetId(vec_ty->element_type()));
   if (ast_elem_ty == nullptr) {
     return nullptr;
   }
-  auto* this_ty = ast_module_.create<ast::type::Vector>(ast_elem_ty, num_elem);
+  auto* this_ty = ast_module_.create<type::Vector>(ast_elem_ty, num_elem);
   // Generate the opposite-signedness vector type, if this type is integral.
   if (unsigned_type_for_.count(ast_elem_ty)) {
-    auto* other_ty = ast_module_.create<ast::type::Vector>(
+    auto* other_ty = ast_module_.create<type::Vector>(
         unsigned_type_for_[ast_elem_ty], num_elem);
     signed_type_for_[other_ty] = this_ty;
     unsigned_type_for_[this_ty] = other_ty;
   } else if (signed_type_for_.count(ast_elem_ty)) {
-    auto* other_ty = ast_module_.create<ast::type::Vector>(
+    auto* other_ty = ast_module_.create<type::Vector>(
         signed_type_for_[ast_elem_ty], num_elem);
     unsigned_type_for_[other_ty] = this_ty;
     signed_type_for_[this_ty] = other_ty;
@@ -755,7 +755,7 @@
   return this_ty;
 }
 
-ast::type::Type* ParserImpl::ConvertType(
+type::Type* ParserImpl::ConvertType(
     const spvtools::opt::analysis::Matrix* mat_ty) {
   const auto* vec_ty = mat_ty->element_type()->AsVector();
   const auto* scalar_ty = vec_ty->element_type();
@@ -765,11 +765,10 @@
   if (ast_scalar_ty == nullptr) {
     return nullptr;
   }
-  return ast_module_.create<ast::type::Matrix>(ast_scalar_ty, num_rows,
-                                               num_columns);
+  return ast_module_.create<type::Matrix>(ast_scalar_ty, num_rows, num_columns);
 }
 
-ast::type::Type* ParserImpl::ConvertType(
+type::Type* ParserImpl::ConvertType(
     const spvtools::opt::analysis::RuntimeArray* rtarr_ty) {
   auto* ast_elem_ty = ConvertType(type_mgr_->GetId(rtarr_ty->element_type()));
   if (ast_elem_ty == nullptr) {
@@ -779,10 +778,10 @@
   if (!ParseArrayDecorations(rtarr_ty, &decorations)) {
     return nullptr;
   }
-  return create<ast::type::Array>(ast_elem_ty, 0, std::move(decorations));
+  return create<type::Array>(ast_elem_ty, 0, std::move(decorations));
 }
 
-ast::type::Type* ParserImpl::ConvertType(
+type::Type* ParserImpl::ConvertType(
     const spvtools::opt::analysis::Array* arr_ty) {
   const auto elem_type_id = type_mgr_->GetId(arr_ty->element_type());
   auto* ast_elem_ty = ConvertType(elem_type_id);
@@ -824,8 +823,8 @@
   if (remap_buffer_block_type_.count(elem_type_id)) {
     remap_buffer_block_type_.insert(type_mgr_->GetId(arr_ty));
   }
-  return create<ast::type::Array>(ast_elem_ty, static_cast<uint32_t>(num_elem),
-                                  std::move(decorations));
+  return create<type::Array>(ast_elem_ty, static_cast<uint32_t>(num_elem),
+                             std::move(decorations));
 }
 
 bool ParserImpl::ParseArrayDecorations(
@@ -857,7 +856,7 @@
   return true;
 }
 
-ast::type::Type* ParserImpl::ConvertType(
+type::Type* ParserImpl::ConvertType(
     uint32_t type_id,
     const spvtools::opt::analysis::Struct* struct_ty) {
   // Compute the struct decoration.
@@ -964,7 +963,7 @@
   namer_.SuggestSanitizedName(type_id, "S");
 
   auto name = namer_.GetName(type_id);
-  auto* result = ast_module_.create<ast::type::Struct>(
+  auto* result = ast_module_.create<type::Struct>(
       ast_module_.RegisterSymbol(name), ast_struct);
   id_to_type_[type_id] = result;
   if (num_non_writable_members == members.size()) {
@@ -974,9 +973,8 @@
   return result;
 }
 
-ast::type::Type* ParserImpl::ConvertType(
-    uint32_t type_id,
-    const spvtools::opt::analysis::Pointer*) {
+type::Type* ParserImpl::ConvertType(uint32_t type_id,
+                                    const spvtools::opt::analysis::Pointer*) {
   const auto* inst = def_use_mgr_->GetDef(type_id);
   const auto pointee_type_id = inst->GetSingleWordInOperand(1);
   const auto storage_class = SpvStorageClass(inst->GetSingleWordInOperand(0));
@@ -1005,7 +1003,7 @@
     ast_storage_class = ast::StorageClass::kStorage;
     remap_buffer_block_type_.insert(type_id);
   }
-  return ast_module_.create<ast::type::Pointer>(ast_elem_ty, ast_storage_class);
+  return ast_module_.create<type::Pointer>(ast_elem_ty, ast_storage_class);
 }
 
 bool ParserImpl::RegisterTypes() {
@@ -1038,7 +1036,7 @@
   // that is OpSpecConstantTrue, OpSpecConstantFalse, or OpSpecConstant.
   for (auto& inst : module_->types_values()) {
     // These will be populated for a valid scalar spec constant.
-    ast::type::Type* ast_type = nullptr;
+    type::Type* ast_type = nullptr;
     ast::ScalarConstructorExpression* ast_expr = nullptr;
 
     switch (inst.opcode()) {
@@ -1054,17 +1052,17 @@
       case SpvOpSpecConstant: {
         ast_type = ConvertType(inst.type_id());
         const uint32_t literal_value = inst.GetSingleWordInOperand(0);
-        if (ast_type->Is<ast::type::I32>()) {
+        if (ast_type->Is<type::I32>()) {
           ast_expr = create<ast::ScalarConstructorExpression>(
               Source{},
               create<ast::SintLiteral>(Source{}, ast_type,
                                        static_cast<int32_t>(literal_value)));
-        } else if (ast_type->Is<ast::type::U32>()) {
+        } else if (ast_type->Is<type::U32>()) {
           ast_expr = create<ast::ScalarConstructorExpression>(
               Source{},
               create<ast::UintLiteral>(Source{}, ast_type,
                                        static_cast<uint32_t>(literal_value)));
-        } else if (ast_type->Is<ast::type::F32>()) {
+        } else if (ast_type->Is<type::F32>()) {
           float float_value;
           // Copy the bits so we can read them as a float.
           std::memcpy(&float_value, &literal_value, sizeof(float_value));
@@ -1131,7 +1129,7 @@
     return;
   }
   const auto name = namer_.GetName(type_id);
-  auto* ast_alias_type = ast_module_.create<ast::type::Alias>(
+  auto* ast_alias_type = ast_module_.create<type::Alias>(
       ast_module_.RegisterSymbol(name), ast_underlying_type);
   // Record this new alias as the AST type for this SPIR-V ID.
   id_to_type_[type_id] = ast_alias_type;
@@ -1176,7 +1174,7 @@
     if (!success_) {
       return false;
     }
-    ast::type::Type* ast_type = nullptr;
+    type::Type* ast_type = nullptr;
     if (spirv_storage_class == SpvStorageClassUniformConstant) {
       // These are opaque handles: samplers or textures
       ast_type = GetTypeForHandleVar(var);
@@ -1190,15 +1188,14 @@
                          "SPIR-V type with ID: "
                       << var.type_id();
       }
-      if (!ast_type->Is<ast::type::Pointer>()) {
+      if (!ast_type->Is<type::Pointer>()) {
         return Fail() << "variable with ID " << var.result_id()
                       << " has non-pointer type " << var.type_id();
       }
     }
 
-    auto* ast_store_type = ast_type->As<ast::type::Pointer>()->type();
-    auto ast_storage_class =
-        ast_type->As<ast::type::Pointer>()->storage_class();
+    auto* ast_store_type = ast_type->As<type::Pointer>()->type();
+    auto ast_storage_class = ast_type->As<type::Pointer>()->storage_class();
     ast::Expression* ast_constructor = nullptr;
     if (var.NumInOperands() > 1) {
       // SPIR-V initializers are always constants.
@@ -1237,7 +1234,7 @@
 ast::Variable* ParserImpl::MakeVariable(
     uint32_t id,
     ast::StorageClass sc,
-    ast::type::Type* type,
+    type::Type* type,
     bool is_const,
     ast::Expression* constructor,
     ast::VariableDecorationList decorations) {
@@ -1251,7 +1248,7 @@
     auto access = read_only_struct_types_.count(type)
                       ? ast::AccessControl::kReadOnly
                       : ast::AccessControl::kReadWrite;
-    type = ast_module_.create<ast::type::AccessControl>(access, type);
+    type = ast_module_.create<type::AccessControl>(access, type);
   }
 
   for (auto& deco : GetDecorationsFor(id)) {
@@ -1351,25 +1348,25 @@
   // So canonicalization should map that way too.
   // Currently "null<type>" is missing from the WGSL parser.
   // See https://bugs.chromium.org/p/tint/issues/detail?id=34
-  if (ast_type->Is<ast::type::U32>()) {
+  if (ast_type->Is<type::U32>()) {
     return {ast_type,
             create<ast::ScalarConstructorExpression>(
                 Source{}, create<ast::UintLiteral>(source, ast_type,
                                                    spirv_const->GetU32()))};
   }
-  if (ast_type->Is<ast::type::I32>()) {
+  if (ast_type->Is<type::I32>()) {
     return {ast_type,
             create<ast::ScalarConstructorExpression>(
                 Source{}, create<ast::SintLiteral>(source, ast_type,
                                                    spirv_const->GetS32()))};
   }
-  if (ast_type->Is<ast::type::F32>()) {
+  if (ast_type->Is<type::F32>()) {
     return {ast_type,
             create<ast::ScalarConstructorExpression>(
                 Source{}, create<ast::FloatLiteral>(source, ast_type,
                                                     spirv_const->GetFloat()))};
   }
-  if (ast_type->Is<ast::type::Bool>()) {
+  if (ast_type->Is<type::Bool>()) {
     const bool value = spirv_const->AsNullConstant()
                            ? false
                            : spirv_const->AsBoolConstant()->value();
@@ -1413,7 +1410,7 @@
   return {};
 }
 
-ast::Expression* ParserImpl::MakeNullValue(ast::type::Type* type) {
+ast::Expression* ParserImpl::MakeNullValue(type::Type* type) {
   // TODO(dneto): Use the no-operands constructor syntax when it becomes
   // available in Tint.
   // https://github.com/gpuweb/gpuweb/issues/685
@@ -1427,23 +1424,23 @@
   auto* original_type = type;
   type = type->UnwrapIfNeeded();
 
-  if (type->Is<ast::type::Bool>()) {
+  if (type->Is<type::Bool>()) {
     return create<ast::ScalarConstructorExpression>(
         Source{}, create<ast::BoolLiteral>(Source{}, type, false));
   }
-  if (type->Is<ast::type::U32>()) {
+  if (type->Is<type::U32>()) {
     return create<ast::ScalarConstructorExpression>(
         Source{}, create<ast::UintLiteral>(Source{}, type, 0u));
   }
-  if (type->Is<ast::type::I32>()) {
+  if (type->Is<type::I32>()) {
     return create<ast::ScalarConstructorExpression>(
         Source{}, create<ast::SintLiteral>(Source{}, type, 0));
   }
-  if (type->Is<ast::type::F32>()) {
+  if (type->Is<type::F32>()) {
     return create<ast::ScalarConstructorExpression>(
         Source{}, create<ast::FloatLiteral>(Source{}, type, 0.0f));
   }
-  if (const auto* vec_ty = type->As<ast::type::Vector>()) {
+  if (const auto* vec_ty = type->As<type::Vector>()) {
     ast::ExpressionList ast_components;
     for (size_t i = 0; i < vec_ty->size(); ++i) {
       ast_components.emplace_back(MakeNullValue(vec_ty->type()));
@@ -1451,10 +1448,10 @@
     return create<ast::TypeConstructorExpression>(Source{}, type,
                                                   std::move(ast_components));
   }
-  if (const auto* mat_ty = type->As<ast::type::Matrix>()) {
+  if (const auto* mat_ty = type->As<type::Matrix>()) {
     // Matrix components are columns
     auto* column_ty =
-        ast_module_.create<ast::type::Vector>(mat_ty->type(), mat_ty->rows());
+        ast_module_.create<type::Vector>(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));
@@ -1462,7 +1459,7 @@
     return create<ast::TypeConstructorExpression>(Source{}, type,
                                                   std::move(ast_components));
   }
-  if (auto* arr_ty = type->As<ast::type::Array>()) {
+  if (auto* arr_ty = type->As<type::Array>()) {
     ast::ExpressionList ast_components;
     for (size_t i = 0; i < arr_ty->size(); ++i) {
       ast_components.emplace_back(MakeNullValue(arr_ty->type()));
@@ -1470,7 +1467,7 @@
     return create<ast::TypeConstructorExpression>(Source{}, original_type,
                                                   std::move(ast_components));
   }
-  if (auto* struct_ty = type->As<ast::type::Struct>()) {
+  if (auto* struct_ty = type->As<type::Struct>()) {
     ast::ExpressionList ast_components;
     for (auto* member : struct_ty->impl()->members()) {
       ast_components.emplace_back(MakeNullValue(member->type()));
@@ -1529,9 +1526,8 @@
   return std::move(expr);
 }
 
-ast::type::Type* ParserImpl::ForcedResultType(
-    const spvtools::opt::Instruction& inst,
-    ast::type::Type* first_operand_type) {
+type::Type* ParserImpl::ForcedResultType(const spvtools::opt::Instruction& inst,
+                                         type::Type* first_operand_type) {
   const auto opcode = inst.opcode();
   if (AssumesResultSignednessMatchesFirstOperand(opcode)) {
     return first_operand_type;
@@ -1546,37 +1542,36 @@
   return nullptr;
 }
 
-ast::type::Type* ParserImpl::GetSignedIntMatchingShape(ast::type::Type* other) {
+type::Type* ParserImpl::GetSignedIntMatchingShape(type::Type* other) {
   if (other == nullptr) {
     Fail() << "no type provided";
   }
-  auto* i32 = ast_module_.create<ast::type::I32>();
-  if (other->Is<ast::type::F32>() || other->Is<ast::type::U32>() ||
-      other->Is<ast::type::I32>()) {
+  auto* i32 = ast_module_.create<type::I32>();
+  if (other->Is<type::F32>() || other->Is<type::U32>() ||
+      other->Is<type::I32>()) {
     return i32;
   }
-  auto* vec_ty = other->As<ast::type::Vector>();
+  auto* vec_ty = other->As<type::Vector>();
   if (vec_ty) {
-    return ast_module_.create<ast::type::Vector>(i32, vec_ty->size());
+    return ast_module_.create<type::Vector>(i32, vec_ty->size());
   }
   Fail() << "required numeric scalar or vector, but got " << other->type_name();
   return nullptr;
 }
 
-ast::type::Type* ParserImpl::GetUnsignedIntMatchingShape(
-    ast::type::Type* other) {
+type::Type* ParserImpl::GetUnsignedIntMatchingShape(type::Type* other) {
   if (other == nullptr) {
     Fail() << "no type provided";
     return nullptr;
   }
-  auto* u32 = ast_module_.create<ast::type::U32>();
-  if (other->Is<ast::type::F32>() || other->Is<ast::type::U32>() ||
-      other->Is<ast::type::I32>()) {
+  auto* u32 = ast_module_.create<type::U32>();
+  if (other->Is<type::F32>() || other->Is<type::U32>() ||
+      other->Is<type::I32>()) {
     return u32;
   }
-  auto* vec_ty = other->As<ast::type::Vector>();
+  auto* vec_ty = other->As<type::Vector>();
   if (vec_ty) {
-    return ast_module_.create<ast::type::Vector>(u32, vec_ty->size());
+    return ast_module_.create<type::Vector>(u32, vec_ty->size());
   }
   Fail() << "required numeric scalar or vector, but got " << other->type_name();
   return nullptr;
@@ -1585,7 +1580,7 @@
 TypedExpression ParserImpl::RectifyForcedResultType(
     TypedExpression expr,
     const spvtools::opt::Instruction& inst,
-    ast::type::Type* first_operand_type) {
+    type::Type* first_operand_type) {
   auto* forced_result_ty = ForcedResultType(inst, first_operand_type);
   if ((forced_result_ty == nullptr) || (forced_result_ty == expr.type)) {
     return expr;
@@ -1764,7 +1759,7 @@
   return raw_handle_type;
 }
 
-ast::type::Pointer* ParserImpl::GetTypeForHandleVar(
+type::Pointer* ParserImpl::GetTypeForHandleVar(
     const spvtools::opt::Instruction& var) {
   auto where = handle_type_.find(&var);
   if (where != handle_type_.end()) {
@@ -1848,11 +1843,11 @@
   }
 
   // Construct the Tint handle type.
-  ast::type::Type* ast_store_type = nullptr;
+  type::Type* ast_store_type = nullptr;
   if (usage.IsSampler()) {
-    ast_store_type = ast_module_.create<ast::type::Sampler>(
-        usage.IsComparisonSampler() ? ast::type::SamplerKind::kComparisonSampler
-                                    : ast::type::SamplerKind::kSampler);
+    ast_store_type = ast_module_.create<type::Sampler>(
+        usage.IsComparisonSampler() ? type::SamplerKind::kComparisonSampler
+                                    : type::SamplerKind::kSampler);
   } else if (usage.IsTexture()) {
     const spvtools::opt::analysis::Image* image_type =
         type_mgr_->GetType(raw_handle_type->result_id())->AsImage();
@@ -1862,9 +1857,9 @@
       return nullptr;
     }
 
-    const ast::type::TextureDimension dim =
+    const type::TextureDimension dim =
         enum_converter_.ToDim(image_type->dim(), image_type->is_arrayed());
-    if (dim == ast::type::TextureDimension::kNone) {
+    if (dim == type::TextureDimension::kNone) {
       return nullptr;
     }
 
@@ -1881,13 +1876,13 @@
       // OpImage variable with an OpImage*Dref* instruction.  In WGSL we must
       // treat that as a depth texture.
       if (image_type->depth() || usage.IsDepthTexture()) {
-        ast_store_type = ast_module_.create<ast::type::DepthTexture>(dim);
+        ast_store_type = ast_module_.create<type::DepthTexture>(dim);
       } else if (image_type->is_multisampled()) {
         // Multisampled textures are never depth textures.
-        ast_store_type = ast_module_.create<ast::type::MultisampledTexture>(
+        ast_store_type = ast_module_.create<type::MultisampledTexture>(
             dim, ast_sampled_component_type);
       } else {
-        ast_store_type = ast_module_.create<ast::type::SampledTexture>(
+        ast_store_type = ast_module_.create<type::SampledTexture>(
             dim, ast_sampled_component_type);
       }
     } else {
@@ -1895,11 +1890,11 @@
                               ? ast::AccessControl::kReadOnly
                               : ast::AccessControl::kWriteOnly;
       const auto format = enum_converter_.ToImageFormat(image_type->format());
-      if (format == ast::type::ImageFormat::kNone) {
+      if (format == type::ImageFormat::kNone) {
         return nullptr;
       }
-      ast_store_type = ast_module_.create<ast::type::AccessControl>(
-          access, ast_module_.create<ast::type::StorageTexture>(dim, format));
+      ast_store_type = ast_module_.create<type::AccessControl>(
+          access, ast_module_.create<type::StorageTexture>(dim, format));
     }
   } else {
     Fail() << "unsupported: UniformConstant variable is not a recognized "
@@ -1909,56 +1904,55 @@
   }
 
   // Form the pointer type.
-  auto* result = ast_module_.create<ast::type::Pointer>(
+  auto* result = ast_module_.create<type::Pointer>(
       ast_store_type, ast::StorageClass::kUniformConstant);
   // Remember it for later.
   handle_type_[&var] = result;
   return result;
 }
 
-ast::type::Type* ParserImpl::GetComponentTypeForFormat(
-    ast::type::ImageFormat format) {
+type::Type* ParserImpl::GetComponentTypeForFormat(type::ImageFormat format) {
   switch (format) {
-    case ast::type::ImageFormat::kR8Uint:
-    case ast::type::ImageFormat::kR16Uint:
-    case ast::type::ImageFormat::kRg8Uint:
-    case ast::type::ImageFormat::kR32Uint:
-    case ast::type::ImageFormat::kRg16Uint:
-    case ast::type::ImageFormat::kRgba8Uint:
-    case ast::type::ImageFormat::kRg32Uint:
-    case ast::type::ImageFormat::kRgba16Uint:
-    case ast::type::ImageFormat::kRgba32Uint:
-      return ast_module_.create<ast::type::U32>();
+    case type::ImageFormat::kR8Uint:
+    case type::ImageFormat::kR16Uint:
+    case type::ImageFormat::kRg8Uint:
+    case type::ImageFormat::kR32Uint:
+    case type::ImageFormat::kRg16Uint:
+    case type::ImageFormat::kRgba8Uint:
+    case type::ImageFormat::kRg32Uint:
+    case type::ImageFormat::kRgba16Uint:
+    case type::ImageFormat::kRgba32Uint:
+      return ast_module_.create<type::U32>();
 
-    case ast::type::ImageFormat::kR8Sint:
-    case ast::type::ImageFormat::kR16Sint:
-    case ast::type::ImageFormat::kRg8Sint:
-    case ast::type::ImageFormat::kR32Sint:
-    case ast::type::ImageFormat::kRg16Sint:
-    case ast::type::ImageFormat::kRgba8Sint:
-    case ast::type::ImageFormat::kRg32Sint:
-    case ast::type::ImageFormat::kRgba16Sint:
-    case ast::type::ImageFormat::kRgba32Sint:
-      return ast_module_.create<ast::type::I32>();
+    case type::ImageFormat::kR8Sint:
+    case type::ImageFormat::kR16Sint:
+    case type::ImageFormat::kRg8Sint:
+    case type::ImageFormat::kR32Sint:
+    case type::ImageFormat::kRg16Sint:
+    case type::ImageFormat::kRgba8Sint:
+    case type::ImageFormat::kRg32Sint:
+    case type::ImageFormat::kRgba16Sint:
+    case type::ImageFormat::kRgba32Sint:
+      return ast_module_.create<type::I32>();
 
-    case ast::type::ImageFormat::kR8Unorm:
-    case ast::type::ImageFormat::kRg8Unorm:
-    case ast::type::ImageFormat::kRgba8Unorm:
-    case ast::type::ImageFormat::kRgba8UnormSrgb:
-    case ast::type::ImageFormat::kBgra8Unorm:
-    case ast::type::ImageFormat::kBgra8UnormSrgb:
-    case ast::type::ImageFormat::kRgb10A2Unorm:
-    case ast::type::ImageFormat::kR8Snorm:
-    case ast::type::ImageFormat::kRg8Snorm:
-    case ast::type::ImageFormat::kRgba8Snorm:
-    case ast::type::ImageFormat::kR16Float:
-    case ast::type::ImageFormat::kR32Float:
-    case ast::type::ImageFormat::kRg16Float:
-    case ast::type::ImageFormat::kRg11B10Float:
-    case ast::type::ImageFormat::kRg32Float:
-    case ast::type::ImageFormat::kRgba16Float:
-    case ast::type::ImageFormat::kRgba32Float:
-      return ast_module_.create<ast::type::F32>();
+    case type::ImageFormat::kR8Unorm:
+    case type::ImageFormat::kRg8Unorm:
+    case type::ImageFormat::kRgba8Unorm:
+    case type::ImageFormat::kRgba8UnormSrgb:
+    case type::ImageFormat::kBgra8Unorm:
+    case type::ImageFormat::kBgra8UnormSrgb:
+    case type::ImageFormat::kRgb10A2Unorm:
+    case type::ImageFormat::kR8Snorm:
+    case type::ImageFormat::kRg8Snorm:
+    case type::ImageFormat::kRgba8Snorm:
+    case type::ImageFormat::kR16Float:
+    case type::ImageFormat::kR32Float:
+    case type::ImageFormat::kRg16Float:
+    case type::ImageFormat::kRg11B10Float:
+    case type::ImageFormat::kRg32Float:
+    case type::ImageFormat::kRgba16Float:
+    case type::ImageFormat::kRgba32Float:
+      return ast_module_.create<type::F32>();
     default:
       break;
   }
@@ -1966,57 +1960,56 @@
   return nullptr;
 }
 
-ast::type::Type* ParserImpl::GetTexelTypeForFormat(
-    ast::type::ImageFormat format) {
+type::Type* ParserImpl::GetTexelTypeForFormat(type::ImageFormat format) {
   auto* component_type = GetComponentTypeForFormat(format);
   if (!component_type) {
     return nullptr;
   }
 
   switch (format) {
-    case ast::type::ImageFormat::kR16Float:
-    case ast::type::ImageFormat::kR16Sint:
-    case ast::type::ImageFormat::kR16Uint:
-    case ast::type::ImageFormat::kR32Float:
-    case ast::type::ImageFormat::kR32Sint:
-    case ast::type::ImageFormat::kR32Uint:
-    case ast::type::ImageFormat::kR8Sint:
-    case ast::type::ImageFormat::kR8Snorm:
-    case ast::type::ImageFormat::kR8Uint:
-    case ast::type::ImageFormat::kR8Unorm:
+    case type::ImageFormat::kR16Float:
+    case type::ImageFormat::kR16Sint:
+    case type::ImageFormat::kR16Uint:
+    case type::ImageFormat::kR32Float:
+    case type::ImageFormat::kR32Sint:
+    case type::ImageFormat::kR32Uint:
+    case type::ImageFormat::kR8Sint:
+    case type::ImageFormat::kR8Snorm:
+    case type::ImageFormat::kR8Uint:
+    case type::ImageFormat::kR8Unorm:
       // One channel
       return component_type;
 
-    case ast::type::ImageFormat::kRg11B10Float:
-    case ast::type::ImageFormat::kRg16Float:
-    case ast::type::ImageFormat::kRg16Sint:
-    case ast::type::ImageFormat::kRg16Uint:
-    case ast::type::ImageFormat::kRg32Float:
-    case ast::type::ImageFormat::kRg32Sint:
-    case ast::type::ImageFormat::kRg32Uint:
-    case ast::type::ImageFormat::kRg8Sint:
-    case ast::type::ImageFormat::kRg8Snorm:
-    case ast::type::ImageFormat::kRg8Uint:
-    case ast::type::ImageFormat::kRg8Unorm:
+    case type::ImageFormat::kRg11B10Float:
+    case type::ImageFormat::kRg16Float:
+    case type::ImageFormat::kRg16Sint:
+    case type::ImageFormat::kRg16Uint:
+    case type::ImageFormat::kRg32Float:
+    case type::ImageFormat::kRg32Sint:
+    case type::ImageFormat::kRg32Uint:
+    case type::ImageFormat::kRg8Sint:
+    case type::ImageFormat::kRg8Snorm:
+    case type::ImageFormat::kRg8Uint:
+    case type::ImageFormat::kRg8Unorm:
       // Two channels
-      return ast_module_.create<ast::type::Vector>(component_type, 2);
+      return ast_module_.create<type::Vector>(component_type, 2);
 
-    case ast::type::ImageFormat::kBgra8Unorm:
-    case ast::type::ImageFormat::kBgra8UnormSrgb:
-    case ast::type::ImageFormat::kRgb10A2Unorm:
-    case ast::type::ImageFormat::kRgba16Float:
-    case ast::type::ImageFormat::kRgba16Sint:
-    case ast::type::ImageFormat::kRgba16Uint:
-    case ast::type::ImageFormat::kRgba32Float:
-    case ast::type::ImageFormat::kRgba32Sint:
-    case ast::type::ImageFormat::kRgba32Uint:
-    case ast::type::ImageFormat::kRgba8Sint:
-    case ast::type::ImageFormat::kRgba8Snorm:
-    case ast::type::ImageFormat::kRgba8Uint:
-    case ast::type::ImageFormat::kRgba8Unorm:
-    case ast::type::ImageFormat::kRgba8UnormSrgb:
+    case type::ImageFormat::kBgra8Unorm:
+    case type::ImageFormat::kBgra8UnormSrgb:
+    case type::ImageFormat::kRgb10A2Unorm:
+    case type::ImageFormat::kRgba16Float:
+    case type::ImageFormat::kRgba16Sint:
+    case type::ImageFormat::kRgba16Uint:
+    case type::ImageFormat::kRgba32Float:
+    case type::ImageFormat::kRgba32Sint:
+    case type::ImageFormat::kRgba32Uint:
+    case type::ImageFormat::kRgba8Sint:
+    case type::ImageFormat::kRgba8Snorm:
+    case type::ImageFormat::kRgba8Uint:
+    case type::ImageFormat::kRgba8Unorm:
+    case type::ImageFormat::kRgba8UnormSrgb:
       // Four channels
-      return ast_module_.create<ast::type::Vector>(component_type, 4);
+      return ast_module_.create<type::Vector>(component_type, 4);
 
     default:
       break;
diff --git a/src/reader/spirv/parser_impl.h b/src/reader/spirv/parser_impl.h
index c832a05..bc85862 100644
--- a/src/reader/spirv/parser_impl.h
+++ b/src/reader/spirv/parser_impl.h
@@ -34,10 +34,6 @@
 #include "src/ast/expression.h"
 #include "src/ast/module.h"
 #include "src/ast/struct_member_decoration.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/type.h"
 #include "src/reader/reader.h"
 #include "src/reader/spirv/entry_point_info.h"
 #include "src/reader/spirv/enum_converter.h"
@@ -45,6 +41,10 @@
 #include "src/reader/spirv/namer.h"
 #include "src/reader/spirv/usage.h"
 #include "src/source.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/type.h"
 
 /// This is the implementation of the SPIR-V parser for Tint.
 
@@ -77,7 +77,7 @@
 /// An AST expression with its type.
 struct TypedExpression {
   /// The type
-  ast::type::Type* type = nullptr;
+  type::Type* type = nullptr;
   /// The expression
   ast::Expression* expr = nullptr;
 };
@@ -147,7 +147,7 @@
   /// after the internal representation of the module has been built.
   /// @param type_id the SPIR-V ID of a type.
   /// @returns a Tint type, or nullptr
-  ast::type::Type* ConvertType(uint32_t type_id);
+  type::Type* ConvertType(uint32_t type_id);
 
   /// Emits an alias type declaration for the given type, if necessary, and
   /// also updates the mapping of the SPIR-V type ID to the alias type.
@@ -298,7 +298,7 @@
   /// in the error case
   ast::Variable* MakeVariable(uint32_t id,
                               ast::StorageClass sc,
-                              ast::type::Type* type,
+                              type::Type* type,
                               bool is_const,
                               ast::Expression* constructor,
                               ast::VariableDecorationList decorations);
@@ -311,7 +311,7 @@
   /// Creates an AST expression node for the null value for the given type.
   /// @param type the AST type
   /// @returns a new expression
-  ast::Expression* MakeNullValue(ast::type::Type* type);
+  ast::Expression* MakeNullValue(type::Type* type);
 
   /// Converts a given expression to the signedness demanded for an operand
   /// of the given SPIR-V instruction, if required.  If the instruction assumes
@@ -334,8 +334,8 @@
   /// @param inst the SPIR-V instruction
   /// @param first_operand_type the AST type for the first operand.
   /// @returns the forced AST result type, or nullptr if no forcing is required.
-  ast::type::Type* ForcedResultType(const spvtools::opt::Instruction& inst,
-                                    ast::type::Type* first_operand_type);
+  type::Type* ForcedResultType(const spvtools::opt::Instruction& inst,
+                               type::Type* first_operand_type);
 
   /// Returns a signed integer scalar or vector type matching the shape (scalar,
   /// vector, and component bit width) of another type, which itself is a
@@ -343,7 +343,7 @@
   /// requirement.
   /// @param other the type whose shape must be matched
   /// @returns the signed scalar or vector type
-  ast::type::Type* GetSignedIntMatchingShape(ast::type::Type* other);
+  type::Type* GetSignedIntMatchingShape(type::Type* other);
 
   /// Returns a signed integer scalar or vector type matching the shape (scalar,
   /// vector, and component bit width) of another type, which itself is a
@@ -351,7 +351,7 @@
   /// requirement.
   /// @param other the type whose shape must be matched
   /// @returns the unsigned scalar or vector type
-  ast::type::Type* GetUnsignedIntMatchingShape(ast::type::Type* other);
+  type::Type* GetUnsignedIntMatchingShape(type::Type* other);
 
   /// Wraps the given expression in an as-cast to the given expression's type,
   /// when the underlying operation produces a forced result type different
@@ -364,10 +364,10 @@
   TypedExpression RectifyForcedResultType(
       TypedExpression expr,
       const spvtools::opt::Instruction& inst,
-      ast::type::Type* first_operand_type);
+      type::Type* first_operand_type);
 
   /// @returns the registered boolean type.
-  ast::type::Type* Bool() const { return bool_type_; }
+  type::Type* Bool() const { return bool_type_; }
 
   /// Bookkeeping used for tracking the "position" builtin variable.
   struct BuiltInPositionInfo {
@@ -455,19 +455,18 @@
   /// @param var the OpVariable instruction
   /// @returns the Tint AST type for the poiner-to-{sampler|texture} or null on
   /// error
-  ast::type::Pointer* GetTypeForHandleVar(
-      const spvtools::opt::Instruction& var);
+  type::Pointer* GetTypeForHandleVar(const spvtools::opt::Instruction& var);
 
   /// Returns the channel component type corresponding to the given image
   /// format.
   /// @param format image texel format
   /// @returns the component type, one of f32, i32, u32
-  ast::type::Type* GetComponentTypeForFormat(ast::type::ImageFormat format);
+  type::Type* GetComponentTypeForFormat(type::ImageFormat format);
 
   /// Returns texel type corresponding to the given image format.
   /// @param format image texel format
   /// @returns the texel format
-  ast::type::Type* GetTexelTypeForFormat(ast::type::ImageFormat format);
+  type::Type* GetTexelTypeForFormat(type::ImageFormat format);
 
   /// Returns the SPIR-V instruction with the given ID, or nullptr.
   /// @param id the SPIR-V result ID
@@ -483,20 +482,20 @@
 
  private:
   /// Converts a specific SPIR-V type to a Tint type. Integer case
-  ast::type::Type* ConvertType(const spvtools::opt::analysis::Integer* int_ty);
+  type::Type* ConvertType(const spvtools::opt::analysis::Integer* int_ty);
   /// Converts a specific SPIR-V type to a Tint type. Float case
-  ast::type::Type* ConvertType(const spvtools::opt::analysis::Float* float_ty);
+  type::Type* ConvertType(const spvtools::opt::analysis::Float* float_ty);
   /// Converts a specific SPIR-V type to a Tint type. Vector case
-  ast::type::Type* ConvertType(const spvtools::opt::analysis::Vector* vec_ty);
+  type::Type* ConvertType(const spvtools::opt::analysis::Vector* vec_ty);
   /// Converts a specific SPIR-V type to a Tint type. Matrix case
-  ast::type::Type* ConvertType(const spvtools::opt::analysis::Matrix* mat_ty);
+  type::Type* ConvertType(const spvtools::opt::analysis::Matrix* mat_ty);
   /// Converts a specific SPIR-V type to a Tint type. RuntimeArray case
   /// @param rtarr_ty the Tint type
-  ast::type::Type* ConvertType(
+  type::Type* ConvertType(
       const spvtools::opt::analysis::RuntimeArray* rtarr_ty);
   /// Converts a specific SPIR-V type to a Tint type. Array case
   /// @param arr_ty the Tint type
-  ast::type::Type* ConvertType(const spvtools::opt::analysis::Array* arr_ty);
+  type::Type* ConvertType(const spvtools::opt::analysis::Array* arr_ty);
   /// Converts a specific SPIR-V type to a Tint type. Struct case.
   /// SPIR-V allows distinct struct type definitions for two OpTypeStruct
   /// that otherwise have the same set of members (and struct and member
@@ -508,16 +507,15 @@
   /// not significant to the optimizer's module representation.
   /// @param type_id the SPIR-V ID for the type.
   /// @param struct_ty the Tint type
-  ast::type::Type* ConvertType(
-      uint32_t type_id,
-      const spvtools::opt::analysis::Struct* struct_ty);
+  type::Type* ConvertType(uint32_t type_id,
+                          const spvtools::opt::analysis::Struct* struct_ty);
   /// Converts a specific SPIR-V type to a Tint type. Pointer case
   /// The pointer to gl_PerVertex maps to nullptr, and instead is recorded
   /// in member #builtin_position_.
   /// @param type_id the SPIR-V ID for the type.
   /// @param ptr_ty the Tint type
-  ast::type::Type* ConvertType(uint32_t type_id,
-                               const spvtools::opt::analysis::Pointer* ptr_ty);
+  type::Type* ConvertType(uint32_t type_id,
+                          const spvtools::opt::analysis::Pointer* ptr_ty);
 
   /// Parses the array or runtime-array decorations.
   /// @param spv_type the SPIR-V array or runtime-array type.
@@ -549,7 +547,7 @@
   spvtools::MessageConsumer message_consumer_;
 
   // The registered boolean type.
-  ast::type::Type* bool_type_;
+  type::Type* bool_type_;
 
   // An object used to store and generate names for SPIR-V objects.
   Namer namer_;
@@ -582,12 +580,12 @@
   std::unordered_set<uint32_t> glsl_std_450_imports_;
 
   // Maps a SPIR-V type ID to the corresponding Tint type.
-  std::unordered_map<uint32_t, ast::type::Type*> id_to_type_;
+  std::unordered_map<uint32_t, type::Type*> id_to_type_;
 
   // Maps an unsigned type corresponding to the given signed type.
-  std::unordered_map<ast::type::Type*, ast::type::Type*> signed_type_for_;
+  std::unordered_map<type::Type*, type::Type*> signed_type_for_;
   // Maps an signed type corresponding to the given unsigned type.
-  std::unordered_map<ast::type::Type*, ast::type::Type*> unsigned_type_for_;
+  std::unordered_map<type::Type*, type::Type*> unsigned_type_for_;
 
   // Bookkeeping for the gl_Position builtin.
   // In Vulkan SPIR-V, it's the 0 member of the gl_PerVertex structure.
@@ -607,7 +605,7 @@
   std::unordered_set<uint32_t> remap_buffer_block_type_;
 
   // The struct types with only read-only members.
-  std::unordered_set<ast::type::Type*> read_only_struct_types_;
+  std::unordered_set<type::Type*> read_only_struct_types_;
 
   // The IDs of scalar spec constants
   std::unordered_set<uint32_t> scalar_spec_constants_;
@@ -632,7 +630,7 @@
   // usages implied by usages of the memory-object-declaration.
   std::unordered_map<const spvtools::opt::Instruction*, Usage> handle_usage_;
   // The inferred pointer type for the given handle variable.
-  std::unordered_map<const spvtools::opt::Instruction*, ast::type::Pointer*>
+  std::unordered_map<const spvtools::opt::Instruction*, type::Pointer*>
       handle_type_;
 
   /// Maps the SPIR-V ID of a module-scope builtin variable that should be
diff --git a/src/reader/spirv/parser_impl_convert_type_test.cc b/src/reader/spirv/parser_impl_convert_type_test.cc
index 99bf393..cc871c0 100644
--- a/src/reader/spirv/parser_impl_convert_type_test.cc
+++ b/src/reader/spirv/parser_impl_convert_type_test.cc
@@ -18,20 +18,20 @@
 
 #include "gmock/gmock.h"
 #include "src/ast/struct.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/reader/spirv/parser_impl.h"
 #include "src/reader/spirv/parser_impl_test_helper.h"
 #include "src/reader/spirv/spirv_tools_helpers_test.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 
 namespace tint {
 namespace reader {
@@ -92,7 +92,7 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(1);
-  EXPECT_TRUE(type->Is<ast::type::Void>());
+  EXPECT_TRUE(type->Is<type::Void>());
   EXPECT_TRUE(p->error().empty());
 }
 
@@ -101,7 +101,7 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(100);
-  EXPECT_TRUE(type->Is<ast::type::Bool>());
+  EXPECT_TRUE(type->Is<type::Bool>());
   EXPECT_TRUE(p->error().empty());
 }
 
@@ -110,7 +110,7 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(2);
-  EXPECT_TRUE(type->Is<ast::type::I32>());
+  EXPECT_TRUE(type->Is<type::I32>());
   EXPECT_TRUE(p->error().empty());
 }
 
@@ -119,7 +119,7 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(3);
-  EXPECT_TRUE(type->Is<ast::type::U32>());
+  EXPECT_TRUE(type->Is<type::U32>());
   EXPECT_TRUE(p->error().empty());
 }
 
@@ -128,7 +128,7 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(4);
-  EXPECT_TRUE(type->Is<ast::type::F32>());
+  EXPECT_TRUE(type->Is<type::F32>());
   EXPECT_TRUE(p->error().empty());
 }
 
@@ -172,19 +172,19 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* v2xf32 = p->ConvertType(20);
-  EXPECT_TRUE(v2xf32->Is<ast::type::Vector>());
-  EXPECT_TRUE(v2xf32->As<ast::type::Vector>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(v2xf32->As<ast::type::Vector>()->size(), 2u);
+  EXPECT_TRUE(v2xf32->Is<type::Vector>());
+  EXPECT_TRUE(v2xf32->As<type::Vector>()->type()->Is<type::F32>());
+  EXPECT_EQ(v2xf32->As<type::Vector>()->size(), 2u);
 
   auto* v3xf32 = p->ConvertType(30);
-  EXPECT_TRUE(v3xf32->Is<ast::type::Vector>());
-  EXPECT_TRUE(v3xf32->As<ast::type::Vector>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(v3xf32->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_TRUE(v3xf32->Is<type::Vector>());
+  EXPECT_TRUE(v3xf32->As<type::Vector>()->type()->Is<type::F32>());
+  EXPECT_EQ(v3xf32->As<type::Vector>()->size(), 3u);
 
   auto* v4xf32 = p->ConvertType(40);
-  EXPECT_TRUE(v4xf32->Is<ast::type::Vector>());
-  EXPECT_TRUE(v4xf32->As<ast::type::Vector>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(v4xf32->As<ast::type::Vector>()->size(), 4u);
+  EXPECT_TRUE(v4xf32->Is<type::Vector>());
+  EXPECT_TRUE(v4xf32->As<type::Vector>()->type()->Is<type::F32>());
+  EXPECT_EQ(v4xf32->As<type::Vector>()->size(), 4u);
 
   EXPECT_TRUE(p->error().empty());
 }
@@ -199,19 +199,19 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* v2xi32 = p->ConvertType(20);
-  EXPECT_TRUE(v2xi32->Is<ast::type::Vector>());
-  EXPECT_TRUE(v2xi32->As<ast::type::Vector>()->type()->Is<ast::type::I32>());
-  EXPECT_EQ(v2xi32->As<ast::type::Vector>()->size(), 2u);
+  EXPECT_TRUE(v2xi32->Is<type::Vector>());
+  EXPECT_TRUE(v2xi32->As<type::Vector>()->type()->Is<type::I32>());
+  EXPECT_EQ(v2xi32->As<type::Vector>()->size(), 2u);
 
   auto* v3xi32 = p->ConvertType(30);
-  EXPECT_TRUE(v3xi32->Is<ast::type::Vector>());
-  EXPECT_TRUE(v3xi32->As<ast::type::Vector>()->type()->Is<ast::type::I32>());
-  EXPECT_EQ(v3xi32->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_TRUE(v3xi32->Is<type::Vector>());
+  EXPECT_TRUE(v3xi32->As<type::Vector>()->type()->Is<type::I32>());
+  EXPECT_EQ(v3xi32->As<type::Vector>()->size(), 3u);
 
   auto* v4xi32 = p->ConvertType(40);
-  EXPECT_TRUE(v4xi32->Is<ast::type::Vector>());
-  EXPECT_TRUE(v4xi32->As<ast::type::Vector>()->type()->Is<ast::type::I32>());
-  EXPECT_EQ(v4xi32->As<ast::type::Vector>()->size(), 4u);
+  EXPECT_TRUE(v4xi32->Is<type::Vector>());
+  EXPECT_TRUE(v4xi32->As<type::Vector>()->type()->Is<type::I32>());
+  EXPECT_EQ(v4xi32->As<type::Vector>()->size(), 4u);
 
   EXPECT_TRUE(p->error().empty());
 }
@@ -226,19 +226,19 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* v2xu32 = p->ConvertType(20);
-  EXPECT_TRUE(v2xu32->Is<ast::type::Vector>());
-  EXPECT_TRUE(v2xu32->As<ast::type::Vector>()->type()->Is<ast::type::U32>());
-  EXPECT_EQ(v2xu32->As<ast::type::Vector>()->size(), 2u);
+  EXPECT_TRUE(v2xu32->Is<type::Vector>());
+  EXPECT_TRUE(v2xu32->As<type::Vector>()->type()->Is<type::U32>());
+  EXPECT_EQ(v2xu32->As<type::Vector>()->size(), 2u);
 
   auto* v3xu32 = p->ConvertType(30);
-  EXPECT_TRUE(v3xu32->Is<ast::type::Vector>());
-  EXPECT_TRUE(v3xu32->As<ast::type::Vector>()->type()->Is<ast::type::U32>());
-  EXPECT_EQ(v3xu32->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_TRUE(v3xu32->Is<type::Vector>());
+  EXPECT_TRUE(v3xu32->As<type::Vector>()->type()->Is<type::U32>());
+  EXPECT_EQ(v3xu32->As<type::Vector>()->size(), 3u);
 
   auto* v4xu32 = p->ConvertType(40);
-  EXPECT_TRUE(v4xu32->Is<ast::type::Vector>());
-  EXPECT_TRUE(v4xu32->As<ast::type::Vector>()->type()->Is<ast::type::U32>());
-  EXPECT_EQ(v4xu32->As<ast::type::Vector>()->size(), 4u);
+  EXPECT_TRUE(v4xu32->Is<type::Vector>());
+  EXPECT_TRUE(v4xu32->As<type::Vector>()->type()->Is<type::U32>());
+  EXPECT_EQ(v4xu32->As<type::Vector>()->size(), 4u);
 
   EXPECT_TRUE(p->error().empty());
 }
@@ -278,58 +278,58 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* m22 = p->ConvertType(22);
-  EXPECT_TRUE(m22->Is<ast::type::Matrix>());
-  EXPECT_TRUE(m22->As<ast::type::Matrix>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(m22->As<ast::type::Matrix>()->rows(), 2u);
-  EXPECT_EQ(m22->As<ast::type::Matrix>()->columns(), 2u);
+  EXPECT_TRUE(m22->Is<type::Matrix>());
+  EXPECT_TRUE(m22->As<type::Matrix>()->type()->Is<type::F32>());
+  EXPECT_EQ(m22->As<type::Matrix>()->rows(), 2u);
+  EXPECT_EQ(m22->As<type::Matrix>()->columns(), 2u);
 
   auto* m23 = p->ConvertType(23);
-  EXPECT_TRUE(m23->Is<ast::type::Matrix>());
-  EXPECT_TRUE(m23->As<ast::type::Matrix>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(m23->As<ast::type::Matrix>()->rows(), 2u);
-  EXPECT_EQ(m23->As<ast::type::Matrix>()->columns(), 3u);
+  EXPECT_TRUE(m23->Is<type::Matrix>());
+  EXPECT_TRUE(m23->As<type::Matrix>()->type()->Is<type::F32>());
+  EXPECT_EQ(m23->As<type::Matrix>()->rows(), 2u);
+  EXPECT_EQ(m23->As<type::Matrix>()->columns(), 3u);
 
   auto* m24 = p->ConvertType(24);
-  EXPECT_TRUE(m24->Is<ast::type::Matrix>());
-  EXPECT_TRUE(m24->As<ast::type::Matrix>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(m24->As<ast::type::Matrix>()->rows(), 2u);
-  EXPECT_EQ(m24->As<ast::type::Matrix>()->columns(), 4u);
+  EXPECT_TRUE(m24->Is<type::Matrix>());
+  EXPECT_TRUE(m24->As<type::Matrix>()->type()->Is<type::F32>());
+  EXPECT_EQ(m24->As<type::Matrix>()->rows(), 2u);
+  EXPECT_EQ(m24->As<type::Matrix>()->columns(), 4u);
 
   auto* m32 = p->ConvertType(32);
-  EXPECT_TRUE(m32->Is<ast::type::Matrix>());
-  EXPECT_TRUE(m32->As<ast::type::Matrix>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(m32->As<ast::type::Matrix>()->rows(), 3u);
-  EXPECT_EQ(m32->As<ast::type::Matrix>()->columns(), 2u);
+  EXPECT_TRUE(m32->Is<type::Matrix>());
+  EXPECT_TRUE(m32->As<type::Matrix>()->type()->Is<type::F32>());
+  EXPECT_EQ(m32->As<type::Matrix>()->rows(), 3u);
+  EXPECT_EQ(m32->As<type::Matrix>()->columns(), 2u);
 
   auto* m33 = p->ConvertType(33);
-  EXPECT_TRUE(m33->Is<ast::type::Matrix>());
-  EXPECT_TRUE(m33->As<ast::type::Matrix>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(m33->As<ast::type::Matrix>()->rows(), 3u);
-  EXPECT_EQ(m33->As<ast::type::Matrix>()->columns(), 3u);
+  EXPECT_TRUE(m33->Is<type::Matrix>());
+  EXPECT_TRUE(m33->As<type::Matrix>()->type()->Is<type::F32>());
+  EXPECT_EQ(m33->As<type::Matrix>()->rows(), 3u);
+  EXPECT_EQ(m33->As<type::Matrix>()->columns(), 3u);
 
   auto* m34 = p->ConvertType(34);
-  EXPECT_TRUE(m34->Is<ast::type::Matrix>());
-  EXPECT_TRUE(m34->As<ast::type::Matrix>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(m34->As<ast::type::Matrix>()->rows(), 3u);
-  EXPECT_EQ(m34->As<ast::type::Matrix>()->columns(), 4u);
+  EXPECT_TRUE(m34->Is<type::Matrix>());
+  EXPECT_TRUE(m34->As<type::Matrix>()->type()->Is<type::F32>());
+  EXPECT_EQ(m34->As<type::Matrix>()->rows(), 3u);
+  EXPECT_EQ(m34->As<type::Matrix>()->columns(), 4u);
 
   auto* m42 = p->ConvertType(42);
-  EXPECT_TRUE(m42->Is<ast::type::Matrix>());
-  EXPECT_TRUE(m42->As<ast::type::Matrix>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(m42->As<ast::type::Matrix>()->rows(), 4u);
-  EXPECT_EQ(m42->As<ast::type::Matrix>()->columns(), 2u);
+  EXPECT_TRUE(m42->Is<type::Matrix>());
+  EXPECT_TRUE(m42->As<type::Matrix>()->type()->Is<type::F32>());
+  EXPECT_EQ(m42->As<type::Matrix>()->rows(), 4u);
+  EXPECT_EQ(m42->As<type::Matrix>()->columns(), 2u);
 
   auto* m43 = p->ConvertType(43);
-  EXPECT_TRUE(m43->Is<ast::type::Matrix>());
-  EXPECT_TRUE(m43->As<ast::type::Matrix>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(m43->As<ast::type::Matrix>()->rows(), 4u);
-  EXPECT_EQ(m43->As<ast::type::Matrix>()->columns(), 3u);
+  EXPECT_TRUE(m43->Is<type::Matrix>());
+  EXPECT_TRUE(m43->As<type::Matrix>()->type()->Is<type::F32>());
+  EXPECT_EQ(m43->As<type::Matrix>()->rows(), 4u);
+  EXPECT_EQ(m43->As<type::Matrix>()->columns(), 3u);
 
   auto* m44 = p->ConvertType(44);
-  EXPECT_TRUE(m44->Is<ast::type::Matrix>());
-  EXPECT_TRUE(m44->As<ast::type::Matrix>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(m44->As<ast::type::Matrix>()->rows(), 4u);
-  EXPECT_EQ(m44->As<ast::type::Matrix>()->columns(), 4u);
+  EXPECT_TRUE(m44->Is<type::Matrix>());
+  EXPECT_TRUE(m44->As<type::Matrix>()->type()->Is<type::F32>());
+  EXPECT_EQ(m44->As<type::Matrix>()->rows(), 4u);
+  EXPECT_EQ(m44->As<type::Matrix>()->columns(), 4u);
 
   EXPECT_TRUE(p->error().empty());
 }
@@ -343,8 +343,8 @@
 
   auto* type = p->ConvertType(10);
   ASSERT_NE(type, nullptr);
-  EXPECT_TRUE(type->Is<ast::type::Array>());
-  auto* arr_type = type->As<ast::type::Array>();
+  EXPECT_TRUE(type->Is<type::Array>());
+  auto* arr_type = type->As<type::Array>();
   EXPECT_TRUE(arr_type->IsRuntimeArray());
   ASSERT_NE(arr_type, nullptr);
   EXPECT_EQ(arr_type->size(), 0u);
@@ -352,7 +352,7 @@
   EXPECT_FALSE(arr_type->has_array_stride());
   auto* elem_type = arr_type->type();
   ASSERT_NE(elem_type, nullptr);
-  EXPECT_TRUE(elem_type->Is<ast::type::U32>());
+  EXPECT_TRUE(elem_type->Is<type::U32>());
   EXPECT_TRUE(p->error().empty());
 }
 
@@ -379,7 +379,7 @@
   EXPECT_TRUE(p->BuildInternalModule());
   auto* type = p->ConvertType(10);
   ASSERT_NE(type, nullptr);
-  auto* arr_type = type->As<ast::type::Array>();
+  auto* arr_type = type->As<type::Array>();
   EXPECT_TRUE(arr_type->IsRuntimeArray());
   ASSERT_NE(arr_type, nullptr);
   EXPECT_EQ(arr_type->array_stride(), 64u);
@@ -425,8 +425,8 @@
 
   auto* type = p->ConvertType(10);
   ASSERT_NE(type, nullptr);
-  EXPECT_TRUE(type->Is<ast::type::Array>());
-  auto* arr_type = type->As<ast::type::Array>();
+  EXPECT_TRUE(type->Is<type::Array>());
+  auto* arr_type = type->As<type::Array>();
   EXPECT_FALSE(arr_type->IsRuntimeArray());
   ASSERT_NE(arr_type, nullptr);
   EXPECT_EQ(arr_type->size(), 42u);
@@ -434,7 +434,7 @@
   EXPECT_FALSE(arr_type->has_array_stride());
   auto* elem_type = arr_type->type();
   ASSERT_NE(elem_type, nullptr);
-  EXPECT_TRUE(elem_type->Is<ast::type::U32>());
+  EXPECT_TRUE(elem_type->Is<type::U32>());
   EXPECT_TRUE(p->error().empty());
 }
 
@@ -513,8 +513,8 @@
 
   auto* type = p->ConvertType(10);
   ASSERT_NE(type, nullptr);
-  EXPECT_TRUE(type->Is<ast::type::Array>());
-  auto* arr_type = type->As<ast::type::Array>();
+  EXPECT_TRUE(type->Is<type::Array>());
+  auto* arr_type = type->As<type::Array>();
   ASSERT_NE(arr_type, nullptr);
   ASSERT_EQ(arr_type->array_stride(), 8u);
   EXPECT_TRUE(arr_type->has_array_stride());
@@ -563,9 +563,9 @@
 
   auto* type = p->ConvertType(10);
   ASSERT_NE(type, nullptr);
-  EXPECT_TRUE(type->Is<ast::type::Struct>());
+  EXPECT_TRUE(type->Is<type::Struct>());
   std::stringstream ss;
-  type->As<ast::type::Struct>()->impl()->to_str(ss, 0);
+  type->As<type::Struct>()->impl()->to_str(ss, 0);
   EXPECT_THAT(Demangler().Demangle(p->get_module(), ss.str()), Eq(R"(Struct{
   StructMember{field0: __u32}
   StructMember{field1: __f32}
@@ -584,9 +584,9 @@
 
   auto* type = p->ConvertType(10);
   ASSERT_NE(type, nullptr);
-  EXPECT_TRUE(type->Is<ast::type::Struct>());
+  EXPECT_TRUE(type->Is<type::Struct>());
   std::stringstream ss;
-  type->As<ast::type::Struct>()->impl()->to_str(ss, 0);
+  type->As<type::Struct>()->impl()->to_str(ss, 0);
   EXPECT_THAT(Demangler().Demangle(p->get_module(), ss.str()), Eq(R"(Struct{
   [[block]]
   StructMember{field0: __u32}
@@ -609,9 +609,9 @@
 
   auto* type = p->ConvertType(10);
   ASSERT_NE(type, nullptr);
-  EXPECT_TRUE(type->Is<ast::type::Struct>());
+  EXPECT_TRUE(type->Is<type::Struct>());
   std::stringstream ss;
-  type->As<ast::type::Struct>()->impl()->to_str(ss, 0);
+  type->As<type::Struct>()->impl()->to_str(ss, 0);
   EXPECT_THAT(Demangler().Demangle(p->get_module(), ss.str()), Eq(R"(Struct{
   StructMember{[[ offset 0 ]] field0: __f32}
   StructMember{[[ offset 8 ]] field1: __vec_2__f32}
@@ -658,10 +658,10 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(3);
-  EXPECT_TRUE(type->Is<ast::type::Pointer>());
-  auto* ptr_ty = type->As<ast::type::Pointer>();
+  EXPECT_TRUE(type->Is<type::Pointer>());
+  auto* ptr_ty = type->As<type::Pointer>();
   EXPECT_NE(ptr_ty, nullptr);
-  EXPECT_TRUE(ptr_ty->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ptr_ty->type()->Is<type::F32>());
   EXPECT_EQ(ptr_ty->storage_class(), ast::StorageClass::kInput);
   EXPECT_TRUE(p->error().empty());
 }
@@ -674,10 +674,10 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(3);
-  EXPECT_TRUE(type->Is<ast::type::Pointer>());
-  auto* ptr_ty = type->As<ast::type::Pointer>();
+  EXPECT_TRUE(type->Is<type::Pointer>());
+  auto* ptr_ty = type->As<type::Pointer>();
   EXPECT_NE(ptr_ty, nullptr);
-  EXPECT_TRUE(ptr_ty->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ptr_ty->type()->Is<type::F32>());
   EXPECT_EQ(ptr_ty->storage_class(), ast::StorageClass::kOutput);
   EXPECT_TRUE(p->error().empty());
 }
@@ -690,10 +690,10 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(3);
-  EXPECT_TRUE(type->Is<ast::type::Pointer>());
-  auto* ptr_ty = type->As<ast::type::Pointer>();
+  EXPECT_TRUE(type->Is<type::Pointer>());
+  auto* ptr_ty = type->As<type::Pointer>();
   EXPECT_NE(ptr_ty, nullptr);
-  EXPECT_TRUE(ptr_ty->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ptr_ty->type()->Is<type::F32>());
   EXPECT_EQ(ptr_ty->storage_class(), ast::StorageClass::kUniform);
   EXPECT_TRUE(p->error().empty());
 }
@@ -706,10 +706,10 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(3);
-  EXPECT_TRUE(type->Is<ast::type::Pointer>());
-  auto* ptr_ty = type->As<ast::type::Pointer>();
+  EXPECT_TRUE(type->Is<type::Pointer>());
+  auto* ptr_ty = type->As<type::Pointer>();
   EXPECT_NE(ptr_ty, nullptr);
-  EXPECT_TRUE(ptr_ty->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ptr_ty->type()->Is<type::F32>());
   EXPECT_EQ(ptr_ty->storage_class(), ast::StorageClass::kWorkgroup);
   EXPECT_TRUE(p->error().empty());
 }
@@ -722,10 +722,10 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(3);
-  EXPECT_TRUE(type->Is<ast::type::Pointer>());
-  auto* ptr_ty = type->As<ast::type::Pointer>();
+  EXPECT_TRUE(type->Is<type::Pointer>());
+  auto* ptr_ty = type->As<type::Pointer>();
   EXPECT_NE(ptr_ty, nullptr);
-  EXPECT_TRUE(ptr_ty->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ptr_ty->type()->Is<type::F32>());
   EXPECT_EQ(ptr_ty->storage_class(), ast::StorageClass::kUniformConstant);
   EXPECT_TRUE(p->error().empty());
 }
@@ -738,10 +738,10 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(3);
-  EXPECT_TRUE(type->Is<ast::type::Pointer>());
-  auto* ptr_ty = type->As<ast::type::Pointer>();
+  EXPECT_TRUE(type->Is<type::Pointer>());
+  auto* ptr_ty = type->As<type::Pointer>();
   EXPECT_NE(ptr_ty, nullptr);
-  EXPECT_TRUE(ptr_ty->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ptr_ty->type()->Is<type::F32>());
   EXPECT_EQ(ptr_ty->storage_class(), ast::StorageClass::kStorage);
   EXPECT_TRUE(p->error().empty());
 }
@@ -754,10 +754,10 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(3);
-  EXPECT_TRUE(type->Is<ast::type::Pointer>());
-  auto* ptr_ty = type->As<ast::type::Pointer>();
+  EXPECT_TRUE(type->Is<type::Pointer>());
+  auto* ptr_ty = type->As<type::Pointer>();
   EXPECT_NE(ptr_ty, nullptr);
-  EXPECT_TRUE(ptr_ty->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ptr_ty->type()->Is<type::F32>());
   EXPECT_EQ(ptr_ty->storage_class(), ast::StorageClass::kImage);
   EXPECT_TRUE(p->error().empty());
 }
@@ -770,10 +770,10 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(3);
-  EXPECT_TRUE(type->Is<ast::type::Pointer>());
-  auto* ptr_ty = type->As<ast::type::Pointer>();
+  EXPECT_TRUE(type->Is<type::Pointer>());
+  auto* ptr_ty = type->As<type::Pointer>();
   EXPECT_NE(ptr_ty, nullptr);
-  EXPECT_TRUE(ptr_ty->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ptr_ty->type()->Is<type::F32>());
   EXPECT_EQ(ptr_ty->storage_class(), ast::StorageClass::kPrivate);
   EXPECT_TRUE(p->error().empty());
 }
@@ -786,10 +786,10 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(3);
-  EXPECT_TRUE(type->Is<ast::type::Pointer>());
-  auto* ptr_ty = type->As<ast::type::Pointer>();
+  EXPECT_TRUE(type->Is<type::Pointer>());
+  auto* ptr_ty = type->As<type::Pointer>();
   EXPECT_NE(ptr_ty, nullptr);
-  EXPECT_TRUE(ptr_ty->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ptr_ty->type()->Is<type::F32>());
   EXPECT_EQ(ptr_ty->storage_class(), ast::StorageClass::kFunction);
   EXPECT_TRUE(p->error().empty());
 }
@@ -805,17 +805,17 @@
 
   auto* type = p->ConvertType(3);
   EXPECT_NE(type, nullptr);
-  EXPECT_TRUE(type->Is<ast::type::Pointer>());
+  EXPECT_TRUE(type->Is<type::Pointer>());
 
-  auto* ptr_ty = type->As<ast::type::Pointer>();
+  auto* ptr_ty = type->As<type::Pointer>();
   EXPECT_NE(ptr_ty, nullptr);
   EXPECT_EQ(ptr_ty->storage_class(), ast::StorageClass::kInput);
-  EXPECT_TRUE(ptr_ty->type()->Is<ast::type::Pointer>());
+  EXPECT_TRUE(ptr_ty->type()->Is<type::Pointer>());
 
-  auto* ptr_ptr_ty = ptr_ty->type()->As<ast::type::Pointer>();
+  auto* ptr_ptr_ty = ptr_ty->type()->As<type::Pointer>();
   EXPECT_NE(ptr_ptr_ty, nullptr);
   EXPECT_EQ(ptr_ptr_ty->storage_class(), ast::StorageClass::kOutput);
-  EXPECT_TRUE(ptr_ptr_ty->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ptr_ptr_ty->type()->Is<type::F32>());
 
   EXPECT_TRUE(p->error().empty());
 }
@@ -828,7 +828,7 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(1);
-  EXPECT_TRUE(type->Is<ast::type::Void>());
+  EXPECT_TRUE(type->Is<type::Void>());
   EXPECT_TRUE(p->error().empty());
 }
 
@@ -841,7 +841,7 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(1);
-  EXPECT_TRUE(type->Is<ast::type::Void>());
+  EXPECT_TRUE(type->Is<type::Void>());
   EXPECT_TRUE(p->error().empty());
 }
 
@@ -854,7 +854,7 @@
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(1);
-  EXPECT_TRUE(type->Is<ast::type::Void>());
+  EXPECT_TRUE(type->Is<type::Void>());
   EXPECT_TRUE(p->error().empty());
 }
 
diff --git a/src/reader/spirv/parser_impl_named_types_test.cc b/src/reader/spirv/parser_impl_named_types_test.cc
index 26a3e3c..13f9af9 100644
--- a/src/reader/spirv/parser_impl_named_types_test.cc
+++ b/src/reader/spirv/parser_impl_named_types_test.cc
@@ -18,10 +18,10 @@
 
 #include "gmock/gmock.h"
 #include "src/ast/struct.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/array_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/vector_type.h"
 #include "src/demangler.h"
 #include "src/reader/spirv/parser_impl.h"
 #include "src/reader/spirv/parser_impl_test_helper.h"
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index 264f23f..3d56aaf 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -45,22 +45,6 @@
 #include "src/ast/struct_block_decoration.h"
 #include "src/ast/struct_member_offset_decoration.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/type_decoration.h"
 #include "src/ast/uint_literal.h"
@@ -70,6 +54,22 @@
 #include "src/ast/variable_decl_statement.h"
 #include "src/ast/workgroup_decoration.h"
 #include "src/reader/wgsl/lexer.h"
+#include "src/type/access_control_type.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 
 namespace tint {
 namespace reader {
@@ -196,7 +196,7 @@
 ParserImpl::FunctionHeader::FunctionHeader(Source src,
                                            std::string n,
                                            ast::VariableList p,
-                                           ast::type::Type* ret_ty)
+                                           type::Type* ret_ty)
     : source(src), name(n), params(p), return_type(ret_ty) {}
 
 ParserImpl::FunctionHeader::~FunctionHeader() = default;
@@ -260,12 +260,12 @@
 }
 
 void ParserImpl::register_constructed(const std::string& name,
-                                      ast::type::Type* type) {
+                                      type::Type* type) {
   assert(type);
   registered_constructs_[name] = type;
 }
 
-ast::type::Type* ParserImpl::get_constructed(const std::string& name) {
+type::Type* ParserImpl::get_constructed(const std::string& name) {
   if (registered_constructs_.find(name) == registered_constructs_.end()) {
     return nullptr;
   }
@@ -361,7 +361,7 @@
 
       auto* type = module_.unique_type(std::move(str.value));
       register_constructed(
-          module_.SymbolToName(type->As<ast::type::Struct>()->symbol()), type);
+          module_.SymbolToName(type->As<type::Struct>()->symbol()), type);
       module_.AddConstructedType(type);
       return true;
     }
@@ -497,7 +497,7 @@
 //  | sampled_texture_type LESS_THAN type_decl GREATER_THAN
 //  | multisampled_texture_type LESS_THAN type_decl GREATER_THAN
 //  | storage_texture_type LESS_THAN image_storage_type GREATER_THAN
-Maybe<ast::type::Type*> ParserImpl::texture_sampler_types() {
+Maybe<type::Type*> ParserImpl::texture_sampler_types() {
   auto type = sampler_type();
   if (type.matched)
     return type;
@@ -514,7 +514,7 @@
     if (subtype.errored)
       return Failure::kErrored;
 
-    return module_.create<ast::type::SampledTexture>(dim.value, subtype.value);
+    return module_.create<type::SampledTexture>(dim.value, subtype.value);
   }
 
   auto ms_dim = multisampled_texture_type();
@@ -525,8 +525,8 @@
     if (subtype.errored)
       return Failure::kErrored;
 
-    return module_.create<ast::type::MultisampledTexture>(ms_dim.value,
-                                                          subtype.value);
+    return module_.create<type::MultisampledTexture>(ms_dim.value,
+                                                     subtype.value);
   }
 
   auto storage = storage_texture_type();
@@ -539,8 +539,7 @@
     if (format.errored)
       return Failure::kErrored;
 
-    return module_.create<ast::type::StorageTexture>(storage.value,
-                                                     format.value);
+    return module_.create<type::StorageTexture>(storage.value, format.value);
   }
 
   // DEPRECATED
@@ -554,9 +553,9 @@
     if (format.errored)
       return Failure::kErrored;
 
-    return module_.create<ast::type::AccessControl>(
-        ac_storage->second, module_.create<ast::type::StorageTexture>(
-                                ac_storage->first, format.value));
+    return module_.create<type::AccessControl>(
+        ac_storage->second,
+        module_.create<type::StorageTexture>(ac_storage->first, format.value));
   }
 
   return Failure::kNoMatch;
@@ -565,13 +564,12 @@
 // sampler_type
 //  : SAMPLER
 //  | SAMPLER_COMPARISON
-Maybe<ast::type::Type*> ParserImpl::sampler_type() {
+Maybe<type::Type*> ParserImpl::sampler_type() {
   if (match(Token::Type::kSampler))
-    return module_.create<ast::type::Sampler>(ast::type::SamplerKind::kSampler);
+    return module_.create<type::Sampler>(type::SamplerKind::kSampler);
 
   if (match(Token::Type::kComparisonSampler))
-    return module_.create<ast::type::Sampler>(
-        ast::type::SamplerKind::kComparisonSampler);
+    return module_.create<type::Sampler>(type::SamplerKind::kComparisonSampler);
 
   return Failure::kNoMatch;
 }
@@ -584,36 +582,36 @@
 //  | TEXTURE_SAMPLED_3D
 //  | TEXTURE_SAMPLED_CUBE
 //  | TEXTURE_SAMPLED_CUBE_ARRAY
-Maybe<ast::type::TextureDimension> ParserImpl::sampled_texture_type() {
+Maybe<type::TextureDimension> ParserImpl::sampled_texture_type() {
   if (match(Token::Type::kTextureSampled1d))
-    return ast::type::TextureDimension::k1d;
+    return type::TextureDimension::k1d;
 
   if (match(Token::Type::kTextureSampled1dArray))
-    return ast::type::TextureDimension::k1dArray;
+    return type::TextureDimension::k1dArray;
 
   if (match(Token::Type::kTextureSampled2d))
-    return ast::type::TextureDimension::k2d;
+    return type::TextureDimension::k2d;
 
   if (match(Token::Type::kTextureSampled2dArray))
-    return ast::type::TextureDimension::k2dArray;
+    return type::TextureDimension::k2dArray;
 
   if (match(Token::Type::kTextureSampled3d))
-    return ast::type::TextureDimension::k3d;
+    return type::TextureDimension::k3d;
 
   if (match(Token::Type::kTextureSampledCube))
-    return ast::type::TextureDimension::kCube;
+    return type::TextureDimension::kCube;
 
   if (match(Token::Type::kTextureSampledCubeArray))
-    return ast::type::TextureDimension::kCubeArray;
+    return type::TextureDimension::kCubeArray;
 
   return Failure::kNoMatch;
 }
 
 // multisampled_texture_type
 //  : TEXTURE_MULTISAMPLED_2D
-Maybe<ast::type::TextureDimension> ParserImpl::multisampled_texture_type() {
+Maybe<type::TextureDimension> ParserImpl::multisampled_texture_type() {
   if (match(Token::Type::kTextureMultisampled2d))
-    return ast::type::TextureDimension::k2d;
+    return type::TextureDimension::k2d;
 
   return Failure::kNoMatch;
 }
@@ -624,17 +622,17 @@
 //  | TEXTURE_STORAGE_2D
 //  | TEXTURE_STORAGE_2D_ARRAY
 //  | TEXTURE_STORAGE_3D
-Maybe<ast::type::TextureDimension> ParserImpl::storage_texture_type() {
+Maybe<type::TextureDimension> ParserImpl::storage_texture_type() {
   if (match(Token::Type::kTextureStorage1d))
-    return ast::type::TextureDimension::k1d;
+    return type::TextureDimension::k1d;
   if (match(Token::Type::kTextureStorage1dArray))
-    return ast::type::TextureDimension::k1dArray;
+    return type::TextureDimension::k1dArray;
   if (match(Token::Type::kTextureStorage2d))
-    return ast::type::TextureDimension::k2d;
+    return type::TextureDimension::k2d;
   if (match(Token::Type::kTextureStorage2dArray))
-    return ast::type::TextureDimension::k2dArray;
+    return type::TextureDimension::k2dArray;
   if (match(Token::Type::kTextureStorage3d))
-    return ast::type::TextureDimension::k3d;
+    return type::TextureDimension::k3d;
 
   return Failure::kNoMatch;
 }
@@ -661,54 +659,49 @@
 //  | TEXTURE_STORAGE_WO_2D
 //  | TEXTURE_STORAGE_WO_2D_ARRAY
 //  | TEXTURE_STORAGE_WO_3D
-Maybe<std::pair<ast::type::TextureDimension, ast::AccessControl>>
+Maybe<std::pair<type::TextureDimension, ast::AccessControl>>
 ParserImpl::storage_texture_type_access_control() {
-  using Ret = std::pair<ast::type::TextureDimension, ast::AccessControl>;
+  using Ret = std::pair<type::TextureDimension, ast::AccessControl>;
   if (match(Token::Type::kTextureStorageReadonly1d)) {
-    return Ret{ast::type::TextureDimension::k1d, ast::AccessControl::kReadOnly};
+    return Ret{type::TextureDimension::k1d, ast::AccessControl::kReadOnly};
   }
 
   if (match(Token::Type::kTextureStorageReadonly1dArray)) {
-    return Ret{ast::type::TextureDimension::k1dArray,
-               ast::AccessControl::kReadOnly};
+    return Ret{type::TextureDimension::k1dArray, ast::AccessControl::kReadOnly};
   }
 
   if (match(Token::Type::kTextureStorageReadonly2d)) {
-    return Ret{ast::type::TextureDimension::k2d, ast::AccessControl::kReadOnly};
+    return Ret{type::TextureDimension::k2d, ast::AccessControl::kReadOnly};
   }
 
   if (match(Token::Type::kTextureStorageReadonly2dArray)) {
-    return Ret{ast::type::TextureDimension::k2dArray,
-               ast::AccessControl::kReadOnly};
+    return Ret{type::TextureDimension::k2dArray, ast::AccessControl::kReadOnly};
   }
 
   if (match(Token::Type::kTextureStorageReadonly3d)) {
-    return Ret{ast::type::TextureDimension::k3d, ast::AccessControl::kReadOnly};
+    return Ret{type::TextureDimension::k3d, ast::AccessControl::kReadOnly};
   }
 
   if (match(Token::Type::kTextureStorageWriteonly1d)) {
-    return Ret{ast::type::TextureDimension::k1d,
-               ast::AccessControl::kWriteOnly};
+    return Ret{type::TextureDimension::k1d, ast::AccessControl::kWriteOnly};
   }
 
   if (match(Token::Type::kTextureStorageWriteonly1dArray)) {
-    return Ret{ast::type::TextureDimension::k1dArray,
+    return Ret{type::TextureDimension::k1dArray,
                ast::AccessControl::kWriteOnly};
   }
 
   if (match(Token::Type::kTextureStorageWriteonly2d)) {
-    return Ret{ast::type::TextureDimension::k2d,
-               ast::AccessControl::kWriteOnly};
+    return Ret{type::TextureDimension::k2d, ast::AccessControl::kWriteOnly};
   }
 
   if (match(Token::Type::kTextureStorageWriteonly2dArray)) {
-    return Ret{ast::type::TextureDimension::k2dArray,
+    return Ret{type::TextureDimension::k2dArray,
                ast::AccessControl::kWriteOnly};
   }
 
   if (match(Token::Type::kTextureStorageWriteonly3d)) {
-    return Ret{ast::type::TextureDimension::k3d,
-               ast::AccessControl::kWriteOnly};
+    return Ret{type::TextureDimension::k3d, ast::AccessControl::kWriteOnly};
   }
 
   return Failure::kNoMatch;
@@ -719,22 +712,19 @@
 //  | TEXTURE_DEPTH_2D_ARRAY
 //  | TEXTURE_DEPTH_CUBE
 //  | TEXTURE_DEPTH_CUBE_ARRAY
-Maybe<ast::type::Type*> ParserImpl::depth_texture_type() {
+Maybe<type::Type*> ParserImpl::depth_texture_type() {
   if (match(Token::Type::kTextureDepth2d))
-    return module_.create<ast::type::DepthTexture>(
-        ast::type::TextureDimension::k2d);
+    return module_.create<type::DepthTexture>(type::TextureDimension::k2d);
 
   if (match(Token::Type::kTextureDepth2dArray))
-    return module_.create<ast::type::DepthTexture>(
-        ast::type::TextureDimension::k2dArray);
+    return module_.create<type::DepthTexture>(type::TextureDimension::k2dArray);
 
   if (match(Token::Type::kTextureDepthCube))
-    return module_.create<ast::type::DepthTexture>(
-        ast::type::TextureDimension::kCube);
+    return module_.create<type::DepthTexture>(type::TextureDimension::kCube);
 
   if (match(Token::Type::kTextureDepthCubeArray))
-    return module_.create<ast::type::DepthTexture>(
-        ast::type::TextureDimension::kCubeArray);
+    return module_.create<type::DepthTexture>(
+        type::TextureDimension::kCubeArray);
 
   return Failure::kNoMatch;
 }
@@ -775,112 +765,112 @@
 //  | RGBA32UINT
 //  | RGBA32SINT
 //  | RGBA32FLOAT
-Expect<ast::type::ImageFormat> ParserImpl::expect_image_storage_type(
+Expect<type::ImageFormat> ParserImpl::expect_image_storage_type(
     const std::string& use) {
   if (match(Token::Type::kFormatR8Unorm))
-    return ast::type::ImageFormat::kR8Unorm;
+    return type::ImageFormat::kR8Unorm;
 
   if (match(Token::Type::kFormatR8Snorm))
-    return ast::type::ImageFormat::kR8Snorm;
+    return type::ImageFormat::kR8Snorm;
 
   if (match(Token::Type::kFormatR8Uint))
-    return ast::type::ImageFormat::kR8Uint;
+    return type::ImageFormat::kR8Uint;
 
   if (match(Token::Type::kFormatR8Sint))
-    return ast::type::ImageFormat::kR8Sint;
+    return type::ImageFormat::kR8Sint;
 
   if (match(Token::Type::kFormatR16Uint))
-    return ast::type::ImageFormat::kR16Uint;
+    return type::ImageFormat::kR16Uint;
 
   if (match(Token::Type::kFormatR16Sint))
-    return ast::type::ImageFormat::kR16Sint;
+    return type::ImageFormat::kR16Sint;
 
   if (match(Token::Type::kFormatR16Float))
-    return ast::type::ImageFormat::kR16Float;
+    return type::ImageFormat::kR16Float;
 
   if (match(Token::Type::kFormatRg8Unorm))
-    return ast::type::ImageFormat::kRg8Unorm;
+    return type::ImageFormat::kRg8Unorm;
 
   if (match(Token::Type::kFormatRg8Snorm))
-    return ast::type::ImageFormat::kRg8Snorm;
+    return type::ImageFormat::kRg8Snorm;
 
   if (match(Token::Type::kFormatRg8Uint))
-    return ast::type::ImageFormat::kRg8Uint;
+    return type::ImageFormat::kRg8Uint;
 
   if (match(Token::Type::kFormatRg8Sint))
-    return ast::type::ImageFormat::kRg8Sint;
+    return type::ImageFormat::kRg8Sint;
 
   if (match(Token::Type::kFormatR32Uint))
-    return ast::type::ImageFormat::kR32Uint;
+    return type::ImageFormat::kR32Uint;
 
   if (match(Token::Type::kFormatR32Sint))
-    return ast::type::ImageFormat::kR32Sint;
+    return type::ImageFormat::kR32Sint;
 
   if (match(Token::Type::kFormatR32Float))
-    return ast::type::ImageFormat::kR32Float;
+    return type::ImageFormat::kR32Float;
 
   if (match(Token::Type::kFormatRg16Uint))
-    return ast::type::ImageFormat::kRg16Uint;
+    return type::ImageFormat::kRg16Uint;
 
   if (match(Token::Type::kFormatRg16Sint))
-    return ast::type::ImageFormat::kRg16Sint;
+    return type::ImageFormat::kRg16Sint;
 
   if (match(Token::Type::kFormatRg16Float))
-    return ast::type::ImageFormat::kRg16Float;
+    return type::ImageFormat::kRg16Float;
 
   if (match(Token::Type::kFormatRgba8Unorm))
-    return ast::type::ImageFormat::kRgba8Unorm;
+    return type::ImageFormat::kRgba8Unorm;
 
   if (match(Token::Type::kFormatRgba8UnormSrgb))
-    return ast::type::ImageFormat::kRgba8UnormSrgb;
+    return type::ImageFormat::kRgba8UnormSrgb;
 
   if (match(Token::Type::kFormatRgba8Snorm))
-    return ast::type::ImageFormat::kRgba8Snorm;
+    return type::ImageFormat::kRgba8Snorm;
 
   if (match(Token::Type::kFormatRgba8Uint))
-    return ast::type::ImageFormat::kRgba8Uint;
+    return type::ImageFormat::kRgba8Uint;
 
   if (match(Token::Type::kFormatRgba8Sint))
-    return ast::type::ImageFormat::kRgba8Sint;
+    return type::ImageFormat::kRgba8Sint;
 
   if (match(Token::Type::kFormatBgra8Unorm))
-    return ast::type::ImageFormat::kBgra8Unorm;
+    return type::ImageFormat::kBgra8Unorm;
 
   if (match(Token::Type::kFormatBgra8UnormSrgb))
-    return ast::type::ImageFormat::kBgra8UnormSrgb;
+    return type::ImageFormat::kBgra8UnormSrgb;
 
   if (match(Token::Type::kFormatRgb10A2Unorm))
-    return ast::type::ImageFormat::kRgb10A2Unorm;
+    return type::ImageFormat::kRgb10A2Unorm;
 
   if (match(Token::Type::kFormatRg11B10Float))
-    return ast::type::ImageFormat::kRg11B10Float;
+    return type::ImageFormat::kRg11B10Float;
 
   if (match(Token::Type::kFormatRg32Uint))
-    return ast::type::ImageFormat::kRg32Uint;
+    return type::ImageFormat::kRg32Uint;
 
   if (match(Token::Type::kFormatRg32Sint))
-    return ast::type::ImageFormat::kRg32Sint;
+    return type::ImageFormat::kRg32Sint;
 
   if (match(Token::Type::kFormatRg32Float))
-    return ast::type::ImageFormat::kRg32Float;
+    return type::ImageFormat::kRg32Float;
 
   if (match(Token::Type::kFormatRgba16Uint))
-    return ast::type::ImageFormat::kRgba16Uint;
+    return type::ImageFormat::kRgba16Uint;
 
   if (match(Token::Type::kFormatRgba16Sint))
-    return ast::type::ImageFormat::kRgba16Sint;
+    return type::ImageFormat::kRgba16Sint;
 
   if (match(Token::Type::kFormatRgba16Float))
-    return ast::type::ImageFormat::kRgba16Float;
+    return type::ImageFormat::kRgba16Float;
 
   if (match(Token::Type::kFormatRgba32Uint))
-    return ast::type::ImageFormat::kRgba32Uint;
+    return type::ImageFormat::kRgba32Uint;
 
   if (match(Token::Type::kFormatRgba32Sint))
-    return ast::type::ImageFormat::kRgba32Sint;
+    return type::ImageFormat::kRgba32Sint;
 
   if (match(Token::Type::kFormatRgba32Float))
-    return ast::type::ImageFormat::kRgba32Float;
+    return type::ImageFormat::kRgba32Float;
 
   return add_error(peek().source(), "invalid format", use);
 }
@@ -919,7 +909,7 @@
   for (auto* deco : access_decos) {
     // If we have an access control decoration then we take it and wrap our
     // type up with that decoration
-    ty = module_.create<ast::type::AccessControl>(
+    ty = module_.create<type::AccessControl>(
         deco->As<ast::AccessDecoration>()->value(), ty);
   }
 
@@ -959,7 +949,7 @@
 
 // type_alias
 //   : TYPE IDENT EQUAL type_decl
-Maybe<ast::type::Type*> ParserImpl::type_alias() {
+Maybe<type::Type*> ParserImpl::type_alias() {
   auto t = peek();
   if (!t.IsType())
     return Failure::kNoMatch;
@@ -981,8 +971,8 @@
   if (!type.matched)
     return add_error(peek(), "invalid type alias");
 
-  auto* alias = module_.create<ast::type::Alias>(
-      module_.RegisterSymbol(name.value), type.value);
+  auto* alias = module_.create<type::Alias>(module_.RegisterSymbol(name.value),
+                                            type.value);
   register_constructed(name.value, alias);
 
   return alias;
@@ -1012,7 +1002,7 @@
 //   | MAT4x3 LESS_THAN type_decl GREATER_THAN
 //   | MAT4x4 LESS_THAN type_decl GREATER_THAN
 //   | texture_sampler_types
-Maybe<ast::type::Type*> ParserImpl::type_decl() {
+Maybe<type::Type*> ParserImpl::type_decl() {
   auto decos = decoration_list();
   if (decos.errored)
     return Failure::kErrored;
@@ -1029,7 +1019,7 @@
   return type.value;
 }
 
-Maybe<ast::type::Type*> ParserImpl::type_decl(ast::DecorationList& decos) {
+Maybe<type::Type*> ParserImpl::type_decl(ast::DecorationList& decos) {
   auto t = peek();
   if (match(Token::Type::kIdentifier)) {
     auto* ty = get_constructed(t.to_str());
@@ -1040,16 +1030,16 @@
   }
 
   if (match(Token::Type::kBool))
-    return module_.create<ast::type::Bool>();
+    return module_.create<type::Bool>();
 
   if (match(Token::Type::kF32))
-    return module_.create<ast::type::F32>();
+    return module_.create<type::F32>();
 
   if (match(Token::Type::kI32))
-    return module_.create<ast::type::I32>();
+    return module_.create<type::I32>();
 
   if (match(Token::Type::kU32))
-    return module_.create<ast::type::U32>();
+    return module_.create<type::U32>();
 
   if (t.IsVec2() || t.IsVec3() || t.IsVec4()) {
     next();  // Consume the peek
@@ -1083,7 +1073,7 @@
   return Failure::kNoMatch;
 }
 
-Expect<ast::type::Type*> ParserImpl::expect_type(const std::string& use) {
+Expect<type::Type*> ParserImpl::expect_type(const std::string& use) {
   auto type = type_decl();
   if (type.errored)
     return Failure::kErrored;
@@ -1092,10 +1082,10 @@
   return type.value;
 }
 
-Expect<ast::type::Type*> ParserImpl::expect_type_decl_pointer() {
+Expect<type::Type*> ParserImpl::expect_type_decl_pointer() {
   const char* use = "ptr declaration";
 
-  return expect_lt_gt_block(use, [&]() -> Expect<ast::type::Type*> {
+  return expect_lt_gt_block(use, [&]() -> Expect<type::Type*> {
     auto sc = expect_storage_class(use);
     if (sc.errored)
       return Failure::kErrored;
@@ -1107,11 +1097,11 @@
     if (subtype.errored)
       return Failure::kErrored;
 
-    return module_.create<ast::type::Pointer>(subtype.value, sc.value);
+    return module_.create<type::Pointer>(subtype.value, sc.value);
   });
 }
 
-Expect<ast::type::Type*> ParserImpl::expect_type_decl_vector(Token t) {
+Expect<type::Type*> ParserImpl::expect_type_decl_vector(Token t) {
   uint32_t count = 2;
   if (t.IsVec3())
     count = 3;
@@ -1124,14 +1114,14 @@
   if (subtype.errored)
     return Failure::kErrored;
 
-  return module_.create<ast::type::Vector>(subtype.value, count);
+  return module_.create<type::Vector>(subtype.value, count);
 }
 
-Expect<ast::type::Type*> ParserImpl::expect_type_decl_array(
+Expect<type::Type*> ParserImpl::expect_type_decl_array(
     ast::ArrayDecorationList decos) {
   const char* use = "array declaration";
 
-  return expect_lt_gt_block(use, [&]() -> Expect<ast::type::Type*> {
+  return expect_lt_gt_block(use, [&]() -> Expect<type::Type*> {
     auto subtype = expect_type(use);
     if (subtype.errored)
       return Failure::kErrored;
@@ -1144,11 +1134,11 @@
       size = val.value;
     }
 
-    return create<ast::type::Array>(subtype.value, size, std::move(decos));
+    return create<type::Array>(subtype.value, size, std::move(decos));
   });
 }
 
-Expect<ast::type::Type*> ParserImpl::expect_type_decl_matrix(Token t) {
+Expect<type::Type*> ParserImpl::expect_type_decl_matrix(Token t) {
   uint32_t rows = 2;
   uint32_t columns = 2;
   if (t.IsMat3x2() || t.IsMat3x3() || t.IsMat3x4()) {
@@ -1168,7 +1158,7 @@
   if (subtype.errored)
     return Failure::kErrored;
 
-  return module_.create<ast::type::Matrix>(subtype.value, rows, columns);
+  return module_.create<type::Matrix>(subtype.value, rows, columns);
 }
 
 // storage_class
@@ -1215,7 +1205,7 @@
 
 // struct_decl
 //   : struct_decoration_decl* STRUCT IDENT struct_body_decl
-Maybe<std::unique_ptr<ast::type::Struct>> ParserImpl::struct_decl(
+Maybe<std::unique_ptr<type::Struct>> ParserImpl::struct_decl(
     ast::DecorationList& decos) {
   auto t = peek();
   auto source = t.source();
@@ -1235,7 +1225,7 @@
   if (struct_decos.errored)
     return Failure::kErrored;
 
-  return std::make_unique<ast::type::Struct>(
+  return std::make_unique<type::Struct>(
       module_.RegisterSymbol(name.value),
       create<ast::Struct>(source, std::move(body.value),
                           std::move(struct_decos.value)));
@@ -1335,9 +1325,9 @@
 // function_type_decl
 //   : type_decl
 //   | VOID
-Maybe<ast::type::Type*> ParserImpl::function_type_decl() {
+Maybe<type::Type*> ParserImpl::function_type_decl() {
   if (match(Token::Type::kVoid))
-    return module_.create<ast::type::Void>();
+    return module_.create<type::Void>();
 
   return type_decl();
 }
@@ -2749,19 +2739,19 @@
 Maybe<ast::Literal*> ParserImpl::const_literal() {
   auto t = peek();
   if (match(Token::Type::kTrue)) {
-    auto* type = module_.create<ast::type::Bool>();
+    auto* type = module_.create<type::Bool>();
     return create<ast::BoolLiteral>(Source{}, type, true);
   }
   if (match(Token::Type::kFalse)) {
-    auto* type = module_.create<ast::type::Bool>();
+    auto* type = module_.create<type::Bool>();
     return create<ast::BoolLiteral>(Source{}, type, false);
   }
   if (match(Token::Type::kSintLiteral)) {
-    auto* type = module_.create<ast::type::I32>();
+    auto* type = module_.create<type::I32>();
     return create<ast::SintLiteral>(Source{}, type, t.to_i32());
   }
   if (match(Token::Type::kUintLiteral)) {
-    auto* type = module_.create<ast::type::U32>();
+    auto* type = module_.create<type::U32>();
     return create<ast::UintLiteral>(Source{}, type, t.to_u32());
   }
   if (match(Token::Type::kFloatLiteral)) {
@@ -2770,7 +2760,7 @@
       next();  // Consume 'f'
       add_error(p.source(), "float literals must not be suffixed with 'f'");
     }
-    auto* type = module_.create<ast::type::F32>();
+    auto* type = module_.create<type::F32>();
     return create<ast::FloatLiteral>(Source{}, type, t.to_f32());
   }
   return Failure::kNoMatch;
diff --git a/src/reader/wgsl/parser_impl.h b/src/reader/wgsl/parser_impl.h
index 385e890..d4d6a4d 100644
--- a/src/reader/wgsl/parser_impl.h
+++ b/src/reader/wgsl/parser_impl.h
@@ -48,10 +48,6 @@
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_decoration.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
 #include "src/ast/variable_decoration.h"
@@ -59,6 +55,10 @@
 #include "src/diagnostic/formatter.h"
 #include "src/reader/wgsl/parser_impl_detail.h"
 #include "src/reader/wgsl/token.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/texture_type.h"
+#include "src/type/type.h"
 
 namespace tint {
 namespace reader {
@@ -222,7 +222,7 @@
   /// variable_ident_decl().
   struct TypedIdentifier {
     /// Parsed type.
-    ast::type::Type* type = nullptr;
+    type::Type* type = nullptr;
     /// Parsed identifier.
     std::string name;
     /// Source to the identifier.
@@ -244,7 +244,7 @@
     FunctionHeader(Source src,
                    std::string n,
                    ast::VariableList p,
-                   ast::type::Type* ret_ty);
+                   type::Type* ret_ty);
     /// Destructor
     ~FunctionHeader();
     /// Assignment operator
@@ -259,7 +259,7 @@
     /// Function parameters
     ast::VariableList params;
     /// Function return type
-    ast::type::Type* return_type;
+    type::Type* return_type;
   };
 
   /// VarDeclInfo contains the parsed information for variable declaration.
@@ -271,7 +271,7 @@
     /// Variable storage class
     ast::StorageClass storage_class;
     /// Variable type
-    ast::type::Type* type;
+    type::Type* type;
   };
 
   /// Creates a new parser using the given file
@@ -348,11 +348,11 @@
   /// Registers a constructed type into the parser
   /// @param name the constructed name
   /// @param type the constructed type
-  void register_constructed(const std::string& name, ast::type::Type* type);
+  void register_constructed(const std::string& name, type::Type* type);
   /// Retrieves a constructed type
   /// @param name The name to lookup
   /// @returns the constructed type for `name` or `nullptr` if not found
-  ast::type::Type* get_constructed(const std::string& name);
+  type::Type* get_constructed(const std::string& name);
 
   /// Parses the `translation_unit` grammar element
   void translation_unit();
@@ -380,15 +380,15 @@
   Maybe<ast::StorageClass> variable_storage_decoration();
   /// Parses a `type_alias` grammar element
   /// @returns the type alias or nullptr on error
-  Maybe<ast::type::Type*> type_alias();
+  Maybe<type::Type*> type_alias();
   /// Parses a `type_decl` grammar element
   /// @returns the parsed Type or nullptr if none matched.
-  Maybe<ast::type::Type*> type_decl();
+  Maybe<type::Type*> type_decl();
   /// Parses a `type_decl` grammar element with the given pre-parsed
   /// decorations.
   /// @param decos the list of decorations for the type.
   /// @returns the parsed Type or nullptr if none matched.
-  Maybe<ast::type::Type*> type_decl(ast::DecorationList& decos);
+  Maybe<type::Type*> type_decl(ast::DecorationList& decos);
   /// Parses a `storage_class` grammar element, erroring on parse failure.
   /// @param use a description of what was being parsed if an error was raised.
   /// @returns the storage class or StorageClass::kNone if none matched
@@ -397,8 +397,7 @@
   /// `struct_decoration_decl*` provided as `decos`.
   /// @returns the struct type or nullptr on error
   /// @param decos the list of decorations for the struct declaration.
-  Maybe<std::unique_ptr<ast::type::Struct>> struct_decl(
-      ast::DecorationList& decos);
+  Maybe<std::unique_ptr<type::Struct>> struct_decl(ast::DecorationList& decos);
   /// Parses a `struct_body_decl` grammar element, erroring on parse failure.
   /// @returns the struct members
   Expect<ast::StructMemberList> expect_struct_body_decl();
@@ -415,37 +414,36 @@
   Maybe<ast::Function*> function_decl(ast::DecorationList& decos);
   /// Parses a `texture_sampler_types` grammar element
   /// @returns the parsed Type or nullptr if none matched.
-  Maybe<ast::type::Type*> texture_sampler_types();
+  Maybe<type::Type*> texture_sampler_types();
   /// Parses a `sampler_type` grammar element
   /// @returns the parsed Type or nullptr if none matched.
-  Maybe<ast::type::Type*> sampler_type();
+  Maybe<type::Type*> sampler_type();
   /// Parses a `multisampled_texture_type` grammar element
   /// @returns returns the multisample texture dimension or kNone if none
   /// matched.
-  Maybe<ast::type::TextureDimension> multisampled_texture_type();
+  Maybe<type::TextureDimension> multisampled_texture_type();
   /// Parses a `sampled_texture_type` grammar element
   /// @returns returns the sample texture dimension or kNone if none matched.
-  Maybe<ast::type::TextureDimension> sampled_texture_type();
+  Maybe<type::TextureDimension> sampled_texture_type();
   /// Parses a `storage_texture_type` grammar element
   /// @returns returns the storage texture dimension.
   /// Returns kNone if none matched.
-  Maybe<ast::type::TextureDimension> storage_texture_type();
+  Maybe<type::TextureDimension> storage_texture_type();
   /// Parses a deprecated `storage_texture_type` grammar element
   /// @returns returns the storage texture dimension and the storage access.
   ///          Returns kNone and kRead if none matched.
-  Maybe<std::pair<ast::type::TextureDimension, ast::AccessControl>>
+  Maybe<std::pair<type::TextureDimension, ast::AccessControl>>
   storage_texture_type_access_control();
   /// Parses a `depth_texture_type` grammar element
   /// @returns the parsed Type or nullptr if none matched.
-  Maybe<ast::type::Type*> depth_texture_type();
+  Maybe<type::Type*> depth_texture_type();
   /// Parses a `image_storage_type` grammar element
   /// @param use a description of what was being parsed if an error was raised
   /// @returns returns the image format or kNone if none matched.
-  Expect<ast::type::ImageFormat> expect_image_storage_type(
-      const std::string& use);
+  Expect<type::ImageFormat> expect_image_storage_type(const std::string& use);
   /// Parses a `function_type_decl` grammar element
   /// @returns the parsed type or nullptr otherwise
-  Maybe<ast::type::Type*> function_type_decl();
+  Maybe<type::Type*> function_type_decl();
   /// Parses a `function_header` grammar element
   /// @returns the parsed function header
   Maybe<FunctionHeader> function_header();
@@ -811,16 +809,15 @@
   /// Used to ensure that all decorations are consumed.
   bool expect_decorations_consumed(const ast::DecorationList& list);
 
-  Expect<ast::type::Type*> expect_type_decl_pointer();
-  Expect<ast::type::Type*> expect_type_decl_vector(Token t);
-  Expect<ast::type::Type*> expect_type_decl_array(
-      ast::ArrayDecorationList decos);
-  Expect<ast::type::Type*> expect_type_decl_matrix(Token t);
+  Expect<type::Type*> expect_type_decl_pointer();
+  Expect<type::Type*> expect_type_decl_vector(Token t);
+  Expect<type::Type*> expect_type_decl_array(ast::ArrayDecorationList decos);
+  Expect<type::Type*> expect_type_decl_matrix(Token t);
 
   Expect<ast::ConstructorExpression*> expect_const_expr_internal(
       uint32_t depth);
 
-  Expect<ast::type::Type*> expect_type(const std::string& use);
+  Expect<type::Type*> expect_type(const std::string& use);
 
   Maybe<ast::Statement*> non_block_statement();
   Maybe<ast::Statement*> for_header_initializer();
@@ -841,7 +838,7 @@
   bool synchronized_ = true;
   std::vector<Token::Type> sync_tokens_;
   int silence_errors_ = 0;
-  std::unordered_map<std::string, ast::type::Type*> registered_constructs_;
+  std::unordered_map<std::string, type::Type*> registered_constructs_;
   ast::Module module_;
   size_t max_errors_ = 25;
 };
diff --git a/src/reader/wgsl/parser_impl_const_expr_test.cc b/src/reader/wgsl/parser_impl_const_expr_test.cc
index 8dd6068..8930fd2 100644
--- a/src/reader/wgsl/parser_impl_const_expr_test.cc
+++ b/src/reader/wgsl/parser_impl_const_expr_test.cc
@@ -16,10 +16,10 @@
 #include "src/ast/bool_literal.h"
 #include "src/ast/float_literal.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
 namespace reader {
@@ -35,8 +35,8 @@
   ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
 
   auto* t = e->As<ast::TypeConstructorExpression>();
-  ASSERT_TRUE(t->type()->Is<ast::type::Vector>());
-  EXPECT_EQ(t->type()->As<ast::type::Vector>()->size(), 2u);
+  ASSERT_TRUE(t->type()->Is<type::Vector>());
+  EXPECT_EQ(t->type()->As<type::Vector>()->size(), 2u);
 
   ASSERT_EQ(t->values().size(), 2u);
   auto& v = t->values();
diff --git a/src/reader/wgsl/parser_impl_depth_texture_type_test.cc b/src/reader/wgsl/parser_impl_depth_texture_type_test.cc
index 2e12319..05da401 100644
--- a/src/reader/wgsl/parser_impl_depth_texture_type_test.cc
+++ b/src/reader/wgsl/parser_impl_depth_texture_type_test.cc
@@ -13,9 +13,9 @@
 // limitations under the License.
 
 #include "gtest/gtest.h"
-#include "src/ast/type/depth_texture_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/depth_texture_type.h"
 
 namespace tint {
 namespace reader {
@@ -36,10 +36,9 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::DepthTexture>());
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k2d);
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::DepthTexture>());
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k2d);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -49,10 +48,9 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::DepthTexture>());
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k2dArray);
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::DepthTexture>());
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k2dArray);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -62,10 +60,9 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::DepthTexture>());
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::kCube);
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::DepthTexture>());
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::kCube);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -75,10 +72,9 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::DepthTexture>());
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::kCubeArray);
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::DepthTexture>());
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::kCubeArray);
   EXPECT_FALSE(p->has_error());
 }
 
diff --git a/src/reader/wgsl/parser_impl_function_decl_test.cc b/src/reader/wgsl/parser_impl_function_decl_test.cc
index 519e408..17b9fd1 100644
--- a/src/reader/wgsl/parser_impl_function_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_function_decl_test.cc
@@ -14,11 +14,11 @@
 
 #include "gtest/gtest.h"
 #include "src/ast/function.h"
-#include "src/ast/type/type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/workgroup_decoration.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/type.h"
+#include "src/type/void_type.h"
 
 namespace tint {
 namespace reader {
@@ -39,14 +39,14 @@
 
   EXPECT_EQ(f->symbol(), p->get_module().RegisterSymbol("main"));
   ASSERT_NE(f->return_type(), nullptr);
-  EXPECT_TRUE(f->return_type()->Is<ast::type::Void>());
+  EXPECT_TRUE(f->return_type()->Is<type::Void>());
 
   ASSERT_EQ(f->params().size(), 2u);
   EXPECT_EQ(f->params()[0]->symbol(), p->get_module().RegisterSymbol("a"));
   EXPECT_EQ(f->params()[1]->symbol(), p->get_module().RegisterSymbol("b"));
 
   ASSERT_NE(f->return_type(), nullptr);
-  EXPECT_TRUE(f->return_type()->Is<ast::type::Void>());
+  EXPECT_TRUE(f->return_type()->Is<type::Void>());
 
   auto* body = f->body();
   ASSERT_EQ(body->size(), 1u);
@@ -67,10 +67,10 @@
 
   EXPECT_EQ(f->symbol(), p->get_module().RegisterSymbol("main"));
   ASSERT_NE(f->return_type(), nullptr);
-  EXPECT_TRUE(f->return_type()->Is<ast::type::Void>());
+  EXPECT_TRUE(f->return_type()->Is<type::Void>());
   ASSERT_EQ(f->params().size(), 0u);
   ASSERT_NE(f->return_type(), nullptr);
-  EXPECT_TRUE(f->return_type()->Is<ast::type::Void>());
+  EXPECT_TRUE(f->return_type()->Is<type::Void>());
 
   auto& decorations = f->decorations();
   ASSERT_EQ(decorations.size(), 1u);
@@ -105,10 +105,10 @@
 
   EXPECT_EQ(f->symbol(), p->get_module().RegisterSymbol("main"));
   ASSERT_NE(f->return_type(), nullptr);
-  EXPECT_TRUE(f->return_type()->Is<ast::type::Void>());
+  EXPECT_TRUE(f->return_type()->Is<type::Void>());
   ASSERT_EQ(f->params().size(), 0u);
   ASSERT_NE(f->return_type(), nullptr);
-  EXPECT_TRUE(f->return_type()->Is<ast::type::Void>());
+  EXPECT_TRUE(f->return_type()->Is<type::Void>());
 
   auto& decorations = f->decorations();
   ASSERT_EQ(decorations.size(), 2u);
@@ -150,10 +150,10 @@
 
   EXPECT_EQ(f->symbol(), p->get_module().RegisterSymbol("main"));
   ASSERT_NE(f->return_type(), nullptr);
-  EXPECT_TRUE(f->return_type()->Is<ast::type::Void>());
+  EXPECT_TRUE(f->return_type()->Is<type::Void>());
   ASSERT_EQ(f->params().size(), 0u);
   ASSERT_NE(f->return_type(), nullptr);
-  EXPECT_TRUE(f->return_type()->Is<ast::type::Void>());
+  EXPECT_TRUE(f->return_type()->Is<type::Void>());
 
   auto& decos = f->decorations();
   ASSERT_EQ(decos.size(), 2u);
diff --git a/src/reader/wgsl/parser_impl_function_header_test.cc b/src/reader/wgsl/parser_impl_function_header_test.cc
index 529de06..1a77313 100644
--- a/src/reader/wgsl/parser_impl_function_header_test.cc
+++ b/src/reader/wgsl/parser_impl_function_header_test.cc
@@ -14,10 +14,10 @@
 
 #include "gtest/gtest.h"
 #include "src/ast/function.h"
-#include "src/ast/type/type.h"
-#include "src/ast/type/void_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/type.h"
+#include "src/type/void_type.h"
 
 namespace tint {
 namespace reader {
@@ -35,7 +35,7 @@
   ASSERT_EQ(f->params.size(), 2u);
   EXPECT_EQ(f->params[0]->symbol(), p->get_module().RegisterSymbol("a"));
   EXPECT_EQ(f->params[1]->symbol(), p->get_module().RegisterSymbol("b"));
-  EXPECT_TRUE(f->return_type->Is<ast::type::Void>());
+  EXPECT_TRUE(f->return_type->Is<type::Void>());
 }
 
 TEST_F(ParserImplTest, FunctionHeader_MissingIdent) {
diff --git a/src/reader/wgsl/parser_impl_function_type_decl_test.cc b/src/reader/wgsl/parser_impl_function_type_decl_test.cc
index b4160e5..f3f16bf 100644
--- a/src/reader/wgsl/parser_impl_function_type_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_function_type_decl_test.cc
@@ -15,11 +15,11 @@
 #include <memory>
 
 #include "gtest/gtest.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/f32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 
 namespace tint {
 namespace reader {
@@ -30,7 +30,7 @@
   auto p = parser("void");
 
   auto& mod = p->get_module();
-  auto* v = mod.create<ast::type::Void>();
+  auto* v = mod.create<type::Void>();
 
   auto e = p->function_type_decl();
   EXPECT_TRUE(e.matched);
@@ -43,8 +43,8 @@
   auto p = parser("vec2<f32>");
 
   auto& mod = p->get_module();
-  auto* f32 = mod.create<ast::type::F32>();
-  auto* vec2 = mod.create<ast::type::Vector>(f32, 2);
+  auto* f32 = mod.create<type::F32>();
+  auto* vec2 = mod.create<type::Vector>(f32, 2);
 
   auto e = p->function_type_decl();
   EXPECT_TRUE(e.matched);
diff --git a/src/reader/wgsl/parser_impl_global_constant_decl_test.cc b/src/reader/wgsl/parser_impl_global_constant_decl_test.cc
index 89864db..149b6d9 100644
--- a/src/reader/wgsl/parser_impl_global_constant_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_constant_decl_test.cc
@@ -13,11 +13,11 @@
 // limitations under the License.
 
 #include "gtest/gtest.h"
-#include "src/ast/type/f32_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decoration.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/f32_type.h"
 
 namespace tint {
 namespace reader {
@@ -35,7 +35,7 @@
   EXPECT_TRUE(e->is_const());
   EXPECT_EQ(e->symbol(), p->get_module().RegisterSymbol("a"));
   ASSERT_NE(e->type(), nullptr);
-  EXPECT_TRUE(e->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(e->type()->Is<type::F32>());
 
   EXPECT_EQ(e->source().range.begin.line, 1u);
   EXPECT_EQ(e->source().range.begin.column, 7u);
diff --git a/src/reader/wgsl/parser_impl_global_decl_test.cc b/src/reader/wgsl/parser_impl_global_decl_test.cc
index 0aee4bf..7fac54c 100644
--- a/src/reader/wgsl/parser_impl_global_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_decl_test.cc
@@ -13,10 +13,10 @@
 // limitations under the License.
 
 #include "gtest/gtest.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/struct_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/array_type.h"
+#include "src/type/struct_type.h"
 
 namespace tint {
 namespace reader {
@@ -88,10 +88,10 @@
 
   auto& m = p->get_module();
   ASSERT_EQ(m.constructed_types().size(), 1u);
-  ASSERT_TRUE(m.constructed_types()[0]->Is<ast::type::Alias>());
-  EXPECT_EQ(m.SymbolToName(
-                m.constructed_types()[0]->As<ast::type::Alias>()->symbol()),
-            "A");
+  ASSERT_TRUE(m.constructed_types()[0]->Is<type::Alias>());
+  EXPECT_EQ(
+      m.SymbolToName(m.constructed_types()[0]->As<type::Alias>()->symbol()),
+      "A");
 }
 
 TEST_F(ParserImplTest, GlobalDecl_TypeAlias_StructIdent) {
@@ -105,12 +105,12 @@
 
   auto& m = p->get_module();
   ASSERT_EQ(m.constructed_types().size(), 2u);
-  ASSERT_TRUE(m.constructed_types()[0]->Is<ast::type::Struct>());
-  auto* str = m.constructed_types()[0]->As<ast::type::Struct>();
+  ASSERT_TRUE(m.constructed_types()[0]->Is<type::Struct>());
+  auto* str = m.constructed_types()[0]->As<type::Struct>();
   EXPECT_EQ(str->symbol(), p->get_module().RegisterSymbol("A"));
 
-  ASSERT_TRUE(m.constructed_types()[1]->Is<ast::type::Alias>());
-  auto* alias = m.constructed_types()[1]->As<ast::type::Alias>();
+  ASSERT_TRUE(m.constructed_types()[1]->Is<type::Alias>());
+  auto* alias = m.constructed_types()[1]->As<type::Alias>();
   EXPECT_EQ(alias->symbol(), p->get_module().RegisterSymbol("B"));
   EXPECT_EQ(alias->type(), str);
 }
@@ -166,9 +166,9 @@
 
   auto* t = m.constructed_types()[0];
   ASSERT_NE(t, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Struct>());
+  ASSERT_TRUE(t->Is<type::Struct>());
 
-  auto* str = t->As<ast::type::Struct>();
+  auto* str = t->As<type::Struct>();
   EXPECT_EQ(str->symbol(), p->get_module().RegisterSymbol("A"));
   EXPECT_EQ(str->impl()->members().size(), 2u);
 }
@@ -185,16 +185,16 @@
 
   auto* t = m.constructed_types()[0];
   ASSERT_NE(t, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Struct>());
+  ASSERT_TRUE(t->Is<type::Struct>());
 
-  auto* str = t->As<ast::type::Struct>();
+  auto* str = t->As<type::Struct>();
   EXPECT_EQ(str->symbol(), p->get_module().RegisterSymbol("A"));
   EXPECT_EQ(str->impl()->members().size(), 1u);
   EXPECT_FALSE(str->IsBlockDecorated());
 
   const auto* ty = str->impl()->members()[0]->type();
-  ASSERT_TRUE(ty->Is<ast::type::Array>());
-  const auto* arr = ty->As<ast::type::Array>();
+  ASSERT_TRUE(ty->Is<type::Array>());
+  const auto* arr = ty->As<type::Array>();
   EXPECT_TRUE(arr->has_array_stride());
   EXPECT_EQ(arr->array_stride(), 4u);
 }
@@ -209,9 +209,9 @@
 
   auto* t = m.constructed_types()[0];
   ASSERT_NE(t, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Struct>());
+  ASSERT_TRUE(t->Is<type::Struct>());
 
-  auto* str = t->As<ast::type::Struct>();
+  auto* str = t->As<type::Struct>();
   EXPECT_EQ(str->symbol(), p->get_module().RegisterSymbol("A"));
   EXPECT_EQ(str->impl()->members().size(), 1u);
   EXPECT_TRUE(str->IsBlockDecorated());
diff --git a/src/reader/wgsl/parser_impl_global_variable_decl_test.cc b/src/reader/wgsl/parser_impl_global_variable_decl_test.cc
index f17ceca..84c392d 100644
--- a/src/reader/wgsl/parser_impl_global_variable_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_variable_decl_test.cc
@@ -14,11 +14,11 @@
 
 #include "gtest/gtest.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/type/f32_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decoration.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/f32_type.h"
 
 namespace tint {
 namespace reader {
@@ -37,7 +37,7 @@
   ASSERT_NE(e.value, nullptr);
 
   EXPECT_EQ(e->symbol(), p->get_module().RegisterSymbol("a"));
-  EXPECT_TRUE(e->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(e->type()->Is<type::F32>());
   EXPECT_EQ(e->storage_class(), ast::StorageClass::kOutput);
 
   EXPECT_EQ(e->source().range.begin.line, 1u);
@@ -60,7 +60,7 @@
   ASSERT_NE(e.value, nullptr);
 
   EXPECT_EQ(e->symbol(), p->get_module().RegisterSymbol("a"));
-  EXPECT_TRUE(e->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(e->type()->Is<type::F32>());
   EXPECT_EQ(e->storage_class(), ast::StorageClass::kOutput);
 
   EXPECT_EQ(e->source().range.begin.line, 1u);
@@ -86,7 +86,7 @@
 
   EXPECT_EQ(e->symbol(), p->get_module().RegisterSymbol("a"));
   ASSERT_NE(e->type(), nullptr);
-  EXPECT_TRUE(e->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(e->type()->Is<type::F32>());
   EXPECT_EQ(e->storage_class(), ast::StorageClass::kOutput);
 
   EXPECT_EQ(e->source().range.begin.line, 1u);
@@ -116,7 +116,7 @@
 
   EXPECT_EQ(e->symbol(), p->get_module().RegisterSymbol("a"));
   ASSERT_NE(e->type(), nullptr);
-  EXPECT_TRUE(e->type()->Is<ast::type::F32>());
+  EXPECT_TRUE(e->type()->Is<type::F32>());
   EXPECT_EQ(e->storage_class(), ast::StorageClass::kOutput);
 
   EXPECT_EQ(e->source().range.begin.line, 1u);
diff --git a/src/reader/wgsl/parser_impl_image_storage_type_test.cc b/src/reader/wgsl/parser_impl_image_storage_type_test.cc
index 64462f7..7f12549 100644
--- a/src/reader/wgsl/parser_impl_image_storage_type_test.cc
+++ b/src/reader/wgsl/parser_impl_image_storage_type_test.cc
@@ -13,9 +13,9 @@
 // limitations under the License.
 
 #include "gtest/gtest.h"
-#include "src/ast/type/texture_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/texture_type.h"
 
 namespace tint {
 namespace reader {
@@ -34,7 +34,7 @@
   auto p = parser("r8unorm");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kR8Unorm);
+  EXPECT_EQ(t.value, type::ImageFormat::kR8Unorm);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -42,7 +42,7 @@
   auto p = parser("r8snorm");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kR8Snorm);
+  EXPECT_EQ(t.value, type::ImageFormat::kR8Snorm);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -50,7 +50,7 @@
   auto p = parser("r8uint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kR8Uint);
+  EXPECT_EQ(t.value, type::ImageFormat::kR8Uint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -58,7 +58,7 @@
   auto p = parser("r8sint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kR8Sint);
+  EXPECT_EQ(t.value, type::ImageFormat::kR8Sint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -66,7 +66,7 @@
   auto p = parser("r16uint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kR16Uint);
+  EXPECT_EQ(t.value, type::ImageFormat::kR16Uint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -74,7 +74,7 @@
   auto p = parser("r16sint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kR16Sint);
+  EXPECT_EQ(t.value, type::ImageFormat::kR16Sint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -82,7 +82,7 @@
   auto p = parser("r16float");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kR16Float);
+  EXPECT_EQ(t.value, type::ImageFormat::kR16Float);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -90,7 +90,7 @@
   auto p = parser("rg8unorm");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRg8Unorm);
+  EXPECT_EQ(t.value, type::ImageFormat::kRg8Unorm);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -98,7 +98,7 @@
   auto p = parser("rg8snorm");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRg8Snorm);
+  EXPECT_EQ(t.value, type::ImageFormat::kRg8Snorm);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -106,7 +106,7 @@
   auto p = parser("rg8uint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRg8Uint);
+  EXPECT_EQ(t.value, type::ImageFormat::kRg8Uint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -114,7 +114,7 @@
   auto p = parser("rg8sint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRg8Sint);
+  EXPECT_EQ(t.value, type::ImageFormat::kRg8Sint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -122,7 +122,7 @@
   auto p = parser("r32uint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kR32Uint);
+  EXPECT_EQ(t.value, type::ImageFormat::kR32Uint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -130,7 +130,7 @@
   auto p = parser("r32sint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kR32Sint);
+  EXPECT_EQ(t.value, type::ImageFormat::kR32Sint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -138,7 +138,7 @@
   auto p = parser("r32float");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kR32Float);
+  EXPECT_EQ(t.value, type::ImageFormat::kR32Float);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -146,7 +146,7 @@
   auto p = parser("rg16uint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRg16Uint);
+  EXPECT_EQ(t.value, type::ImageFormat::kRg16Uint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -154,7 +154,7 @@
   auto p = parser("rg16sint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRg16Sint);
+  EXPECT_EQ(t.value, type::ImageFormat::kRg16Sint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -162,7 +162,7 @@
   auto p = parser("rg16float");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRg16Float);
+  EXPECT_EQ(t.value, type::ImageFormat::kRg16Float);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -170,7 +170,7 @@
   auto p = parser("rgba8unorm");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRgba8Unorm);
+  EXPECT_EQ(t.value, type::ImageFormat::kRgba8Unorm);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -178,7 +178,7 @@
   auto p = parser("rgba8unorm_srgb");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRgba8UnormSrgb);
+  EXPECT_EQ(t.value, type::ImageFormat::kRgba8UnormSrgb);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -186,7 +186,7 @@
   auto p = parser("rgba8snorm");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRgba8Snorm);
+  EXPECT_EQ(t.value, type::ImageFormat::kRgba8Snorm);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -194,7 +194,7 @@
   auto p = parser("rgba8uint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRgba8Uint);
+  EXPECT_EQ(t.value, type::ImageFormat::kRgba8Uint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -202,7 +202,7 @@
   auto p = parser("rgba8sint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRgba8Sint);
+  EXPECT_EQ(t.value, type::ImageFormat::kRgba8Sint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -210,7 +210,7 @@
   auto p = parser("bgra8unorm");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kBgra8Unorm);
+  EXPECT_EQ(t.value, type::ImageFormat::kBgra8Unorm);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -218,7 +218,7 @@
   auto p = parser("bgra8unorm_srgb");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kBgra8UnormSrgb);
+  EXPECT_EQ(t.value, type::ImageFormat::kBgra8UnormSrgb);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -226,7 +226,7 @@
   auto p = parser("rgb10a2unorm");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRgb10A2Unorm);
+  EXPECT_EQ(t.value, type::ImageFormat::kRgb10A2Unorm);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -234,7 +234,7 @@
   auto p = parser("rg11b10float");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRg11B10Float);
+  EXPECT_EQ(t.value, type::ImageFormat::kRg11B10Float);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -242,7 +242,7 @@
   auto p = parser("rg32uint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRg32Uint);
+  EXPECT_EQ(t.value, type::ImageFormat::kRg32Uint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -250,7 +250,7 @@
   auto p = parser("rg32sint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRg32Sint);
+  EXPECT_EQ(t.value, type::ImageFormat::kRg32Sint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -258,7 +258,7 @@
   auto p = parser("rg32float");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRg32Float);
+  EXPECT_EQ(t.value, type::ImageFormat::kRg32Float);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -266,7 +266,7 @@
   auto p = parser("rgba16uint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRgba16Uint);
+  EXPECT_EQ(t.value, type::ImageFormat::kRgba16Uint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -274,7 +274,7 @@
   auto p = parser("rgba16sint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRgba16Sint);
+  EXPECT_EQ(t.value, type::ImageFormat::kRgba16Sint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -282,7 +282,7 @@
   auto p = parser("rgba16float");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRgba16Float);
+  EXPECT_EQ(t.value, type::ImageFormat::kRgba16Float);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -290,7 +290,7 @@
   auto p = parser("rgba32uint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRgba32Uint);
+  EXPECT_EQ(t.value, type::ImageFormat::kRgba32Uint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -298,7 +298,7 @@
   auto p = parser("rgba32sint");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRgba32Sint);
+  EXPECT_EQ(t.value, type::ImageFormat::kRgba32Sint);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -306,7 +306,7 @@
   auto p = parser("rgba32float");
   auto t = p->expect_image_storage_type("test");
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::ImageFormat::kRgba32Float);
+  EXPECT_EQ(t.value, type::ImageFormat::kRgba32Float);
   EXPECT_FALSE(p->has_error());
 }
 
diff --git a/src/reader/wgsl/parser_impl_param_list_test.cc b/src/reader/wgsl/parser_impl_param_list_test.cc
index 58b3cbd..a8a9106 100644
--- a/src/reader/wgsl/parser_impl_param_list_test.cc
+++ b/src/reader/wgsl/parser_impl_param_list_test.cc
@@ -15,12 +15,12 @@
 #include <memory>
 
 #include "gtest/gtest.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/variable.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
 namespace reader {
@@ -31,7 +31,7 @@
   auto p = parser("a : i32");
 
   auto& mod = p->get_module();
-  auto* i32 = mod.create<ast::type::I32>();
+  auto* i32 = mod.create<type::I32>();
 
   auto e = p->expect_param_list();
   ASSERT_FALSE(p->has_error()) << p->error();
@@ -52,9 +52,9 @@
   auto p = parser("a : i32, b: f32, c: vec2<f32>");
 
   auto& mod = p->get_module();
-  auto* i32 = mod.create<ast::type::I32>();
-  auto* f32 = mod.create<ast::type::F32>();
-  auto* vec2 = mod.create<ast::type::Vector>(f32, 2);
+  auto* i32 = mod.create<type::I32>();
+  auto* f32 = mod.create<type::F32>();
+  auto* vec2 = mod.create<type::Vector>(f32, 2);
 
   auto e = p->expect_param_list();
   ASSERT_FALSE(p->has_error()) << p->error();
diff --git a/src/reader/wgsl/parser_impl_primary_expression_test.cc b/src/reader/wgsl/parser_impl_primary_expression_test.cc
index a6bdb1b..74ddfc3 100644
--- a/src/reader/wgsl/parser_impl_primary_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_primary_expression_test.cc
@@ -20,12 +20,12 @@
 #include "src/ast/identifier_expression.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
 
 namespace tint {
 namespace reader {
@@ -194,7 +194,7 @@
   auto p = parser("f32(1)");
 
   auto& mod = p->get_module();
-  auto* f32 = mod.create<ast::type::F32>();
+  auto* f32 = mod.create<type::F32>();
 
   auto e = p->primary_expression();
   EXPECT_TRUE(e.matched);
@@ -216,7 +216,7 @@
   auto p = parser("bitcast<f32>(1)");
 
   auto& mod = p->get_module();
-  auto* f32 = mod.create<ast::type::F32>();
+  auto* f32 = mod.create<type::F32>();
 
   auto e = p->primary_expression();
   EXPECT_TRUE(e.matched);
diff --git a/src/reader/wgsl/parser_impl_sampled_texture_type_test.cc b/src/reader/wgsl/parser_impl_sampled_texture_type_test.cc
index deda8b7..fc553e3 100644
--- a/src/reader/wgsl/parser_impl_sampled_texture_type_test.cc
+++ b/src/reader/wgsl/parser_impl_sampled_texture_type_test.cc
@@ -13,9 +13,9 @@
 // limitations under the License.
 
 #include "gtest/gtest.h"
-#include "src/ast/type/texture_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/texture_type.h"
 
 namespace tint {
 namespace reader {
@@ -35,7 +35,7 @@
   auto t = p->sampled_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k1d);
+  EXPECT_EQ(t.value, type::TextureDimension::k1d);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -44,7 +44,7 @@
   auto t = p->sampled_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k1dArray);
+  EXPECT_EQ(t.value, type::TextureDimension::k1dArray);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -53,7 +53,7 @@
   auto t = p->sampled_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k2d);
+  EXPECT_EQ(t.value, type::TextureDimension::k2d);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -62,7 +62,7 @@
   auto t = p->sampled_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k2dArray);
+  EXPECT_EQ(t.value, type::TextureDimension::k2dArray);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -71,7 +71,7 @@
   auto t = p->sampled_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k3d);
+  EXPECT_EQ(t.value, type::TextureDimension::k3d);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -80,7 +80,7 @@
   auto t = p->sampled_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::kCube);
+  EXPECT_EQ(t.value, type::TextureDimension::kCube);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -89,7 +89,7 @@
   auto t = p->sampled_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::kCubeArray);
+  EXPECT_EQ(t.value, type::TextureDimension::kCubeArray);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -98,7 +98,7 @@
   auto t = p->sampled_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k1d);
+  EXPECT_EQ(t.value, type::TextureDimension::k1d);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -107,7 +107,7 @@
   auto t = p->sampled_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k1dArray);
+  EXPECT_EQ(t.value, type::TextureDimension::k1dArray);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -116,7 +116,7 @@
   auto t = p->sampled_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k2d);
+  EXPECT_EQ(t.value, type::TextureDimension::k2d);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -125,7 +125,7 @@
   auto t = p->sampled_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k2dArray);
+  EXPECT_EQ(t.value, type::TextureDimension::k2dArray);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -134,7 +134,7 @@
   auto t = p->sampled_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k3d);
+  EXPECT_EQ(t.value, type::TextureDimension::k3d);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -143,7 +143,7 @@
   auto t = p->sampled_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::kCube);
+  EXPECT_EQ(t.value, type::TextureDimension::kCube);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -152,7 +152,7 @@
   auto t = p->sampled_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::kCubeArray);
+  EXPECT_EQ(t.value, type::TextureDimension::kCubeArray);
   EXPECT_FALSE(p->has_error());
 }
 
diff --git a/src/reader/wgsl/parser_impl_sampler_type_test.cc b/src/reader/wgsl/parser_impl_sampler_type_test.cc
index b4303cd..ce98c32 100644
--- a/src/reader/wgsl/parser_impl_sampler_type_test.cc
+++ b/src/reader/wgsl/parser_impl_sampler_type_test.cc
@@ -13,9 +13,9 @@
 // limitations under the License.
 
 #include "gtest/gtest.h"
-#include "src/ast/type/sampler_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/sampler_type.h"
 
 namespace tint {
 namespace reader {
@@ -37,8 +37,8 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Sampler>());
-  EXPECT_FALSE(t->As<ast::type::Sampler>()->IsComparison());
+  ASSERT_TRUE(t->Is<type::Sampler>());
+  EXPECT_FALSE(t->As<type::Sampler>()->IsComparison());
   EXPECT_FALSE(p->has_error());
 }
 
@@ -48,8 +48,8 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Sampler>());
-  EXPECT_TRUE(t->As<ast::type::Sampler>()->IsComparison());
+  ASSERT_TRUE(t->Is<type::Sampler>());
+  EXPECT_TRUE(t->As<type::Sampler>()->IsComparison());
   EXPECT_FALSE(p->has_error());
 }
 
diff --git a/src/reader/wgsl/parser_impl_storage_texture_type_test.cc b/src/reader/wgsl/parser_impl_storage_texture_type_test.cc
index 82d97fe..d145af8 100644
--- a/src/reader/wgsl/parser_impl_storage_texture_type_test.cc
+++ b/src/reader/wgsl/parser_impl_storage_texture_type_test.cc
@@ -13,9 +13,9 @@
 // limitations under the License.
 
 #include "gtest/gtest.h"
-#include "src/ast/type/storage_texture_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/storage_texture_type.h"
 
 namespace tint {
 namespace reader {
@@ -35,7 +35,7 @@
   auto t = p->storage_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k1d);
+  EXPECT_EQ(t.value, type::TextureDimension::k1d);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -44,7 +44,7 @@
   auto t = p->storage_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k1dArray);
+  EXPECT_EQ(t.value, type::TextureDimension::k1dArray);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -53,7 +53,7 @@
   auto t = p->storage_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k2d);
+  EXPECT_EQ(t.value, type::TextureDimension::k2d);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -62,7 +62,7 @@
   auto t = p->storage_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k2dArray);
+  EXPECT_EQ(t.value, type::TextureDimension::k2dArray);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -71,7 +71,7 @@
   auto t = p->storage_texture_type();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(t.value, ast::type::TextureDimension::k3d);
+  EXPECT_EQ(t.value, type::TextureDimension::k3d);
   EXPECT_FALSE(p->has_error());
 }
 
@@ -88,7 +88,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k1d);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k1d);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kReadOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -98,7 +98,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k1dArray);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k1dArray);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kReadOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -108,7 +108,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k2d);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k2d);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kReadOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -118,7 +118,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k2dArray);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k2dArray);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kReadOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -128,7 +128,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k3d);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k3d);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kReadOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -138,7 +138,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k1d);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k1d);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kWriteOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -148,7 +148,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k1dArray);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k1dArray);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kWriteOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -158,7 +158,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k2d);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k2d);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kWriteOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -168,7 +168,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k2dArray);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k2dArray);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kWriteOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -178,7 +178,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k3d);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k3d);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kWriteOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -188,7 +188,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k1d);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k1d);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kReadOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -198,7 +198,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k1dArray);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k1dArray);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kReadOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -208,7 +208,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k2d);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k2d);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kReadOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -218,7 +218,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k2dArray);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k2dArray);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kReadOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -228,7 +228,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k3d);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k3d);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kReadOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -238,7 +238,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k1d);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k1d);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kWriteOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -248,7 +248,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k1dArray);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k1dArray);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kWriteOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -258,7 +258,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k2d);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k2d);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kWriteOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -268,7 +268,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k2dArray);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k2dArray);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kWriteOnly);
   EXPECT_FALSE(p->has_error());
 }
@@ -278,7 +278,7 @@
   auto t = p->storage_texture_type_access_control();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
-  EXPECT_EQ(std::get<0>(t.value), ast::type::TextureDimension::k3d);
+  EXPECT_EQ(std::get<0>(t.value), type::TextureDimension::k3d);
   EXPECT_EQ(std::get<1>(t.value), ast::AccessControl::kWriteOnly);
   EXPECT_FALSE(p->has_error());
 }
diff --git a/src/reader/wgsl/parser_impl_struct_body_decl_test.cc b/src/reader/wgsl/parser_impl_struct_body_decl_test.cc
index a66837b..bbfdce1 100644
--- a/src/reader/wgsl/parser_impl_struct_body_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_body_decl_test.cc
@@ -13,9 +13,9 @@
 // limitations under the License.
 
 #include "gtest/gtest.h"
-#include "src/ast/type/i32_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/i32_type.h"
 
 namespace tint {
 namespace reader {
@@ -26,7 +26,7 @@
   auto p = parser("{a : i32;}");
 
   auto& mod = p->get_module();
-  auto* i32 = mod.create<ast::type::I32>();
+  auto* i32 = mod.create<type::I32>();
 
   auto m = p->expect_struct_body_decl();
   ASSERT_FALSE(p->has_error());
diff --git a/src/reader/wgsl/parser_impl_struct_decl_test.cc b/src/reader/wgsl/parser_impl_struct_decl_test.cc
index b218608..9680c4d 100644
--- a/src/reader/wgsl/parser_impl_struct_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_decl_test.cc
@@ -14,7 +14,7 @@
 
 #include "gtest/gtest.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/type/struct_type.h"
+#include "src/type/struct_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
diff --git a/src/reader/wgsl/parser_impl_struct_member_test.cc b/src/reader/wgsl/parser_impl_struct_member_test.cc
index f5a9fd0..554e1d7 100644
--- a/src/reader/wgsl/parser_impl_struct_member_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_member_test.cc
@@ -14,9 +14,9 @@
 
 #include "gtest/gtest.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/i32_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/i32_type.h"
 
 namespace tint {
 namespace reader {
@@ -27,7 +27,7 @@
   auto p = parser("a : i32;");
 
   auto& mod = p->get_module();
-  auto* i32 = mod.create<ast::type::I32>();
+  auto* i32 = mod.create<type::I32>();
 
   auto decos = p->decoration_list();
   EXPECT_FALSE(decos.errored);
@@ -53,7 +53,7 @@
   auto p = parser("[[offset(2)]] a : i32;");
 
   auto& mod = p->get_module();
-  auto* i32 = mod.create<ast::type::I32>();
+  auto* i32 = mod.create<type::I32>();
 
   auto decos = p->decoration_list();
   EXPECT_FALSE(decos.errored);
@@ -84,7 +84,7 @@
 [[offset(4)]] a : i32;)");
 
   auto& mod = p->get_module();
-  auto* i32 = mod.create<ast::type::I32>();
+  auto* i32 = mod.create<type::I32>();
 
   auto decos = p->decoration_list();
   EXPECT_FALSE(decos.errored);
diff --git a/src/reader/wgsl/parser_impl_test.cc b/src/reader/wgsl/parser_impl_test.cc
index 95d28cf..1c21208 100644
--- a/src/reader/wgsl/parser_impl_test.cc
+++ b/src/reader/wgsl/parser_impl_test.cc
@@ -15,7 +15,7 @@
 #include "src/reader/wgsl/parser_impl.h"
 
 #include "gtest/gtest.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc b/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
index 88bc7d3..df3f0b6 100644
--- a/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
+++ b/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
@@ -13,16 +13,16 @@
 // limitations under the License.
 
 #include "gtest/gtest.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/u32_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/access_control_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/u32_type.h"
 
 namespace tint {
 namespace reader {
@@ -45,8 +45,8 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Sampler>());
-  ASSERT_FALSE(t->As<ast::type::Sampler>()->IsComparison());
+  ASSERT_TRUE(t->Is<type::Sampler>());
+  ASSERT_FALSE(t->As<type::Sampler>()->IsComparison());
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SamplerComparison) {
@@ -56,8 +56,8 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Sampler>());
-  ASSERT_TRUE(t->As<ast::type::Sampler>()->IsComparison());
+  ASSERT_TRUE(t->Is<type::Sampler>());
+  ASSERT_TRUE(t->As<type::Sampler>()->IsComparison());
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_DepthTexture) {
@@ -67,10 +67,9 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::DepthTexture>());
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k2d);
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::DepthTexture>());
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k2d);
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_F32_Old) {
@@ -80,11 +79,10 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::SampledTexture>());
-  ASSERT_TRUE(t->As<ast::type::SampledTexture>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k1d);
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::SampledTexture>());
+  ASSERT_TRUE(t->As<type::SampledTexture>()->type()->Is<type::F32>());
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k1d);
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_I32_Old) {
@@ -94,11 +92,10 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::SampledTexture>());
-  ASSERT_TRUE(t->As<ast::type::SampledTexture>()->type()->Is<ast::type::I32>());
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k2d);
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::SampledTexture>());
+  ASSERT_TRUE(t->As<type::SampledTexture>()->type()->Is<type::I32>());
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k2d);
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_U32_Old) {
@@ -108,11 +105,10 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::SampledTexture>());
-  ASSERT_TRUE(t->As<ast::type::SampledTexture>()->type()->Is<ast::type::U32>());
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k3d);
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::SampledTexture>());
+  ASSERT_TRUE(t->As<type::SampledTexture>()->type()->Is<type::U32>());
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k3d);
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_Invalid_Old) {
@@ -163,11 +159,10 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::SampledTexture>());
-  ASSERT_TRUE(t->As<ast::type::SampledTexture>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k1d);
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::SampledTexture>());
+  ASSERT_TRUE(t->As<type::SampledTexture>()->type()->Is<type::F32>());
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k1d);
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_I32) {
@@ -177,11 +172,10 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::SampledTexture>());
-  ASSERT_TRUE(t->As<ast::type::SampledTexture>()->type()->Is<ast::type::I32>());
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k2d);
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::SampledTexture>());
+  ASSERT_TRUE(t->As<type::SampledTexture>()->type()->Is<type::I32>());
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k2d);
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_U32) {
@@ -191,11 +185,10 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::SampledTexture>());
-  ASSERT_TRUE(t->As<ast::type::SampledTexture>()->type()->Is<ast::type::U32>());
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k3d);
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::SampledTexture>());
+  ASSERT_TRUE(t->As<type::SampledTexture>()->type()->Is<type::U32>());
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k3d);
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_Invalid) {
@@ -245,12 +238,10 @@
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::MultisampledTexture>());
-  ASSERT_TRUE(
-      t->As<ast::type::MultisampledTexture>()->type()->Is<ast::type::I32>());
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k2d);
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::MultisampledTexture>());
+  ASSERT_TRUE(t->As<type::MultisampledTexture>()->type()->Is<type::I32>());
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k2d);
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_MultisampledTexture_Invalid) {
@@ -302,17 +293,16 @@
   EXPECT_FALSE(ac.errored);
   ASSERT_NE(ac.value, nullptr);
 
-  ASSERT_TRUE(ac->Is<ast::type::AccessControl>());
-  EXPECT_EQ(ac->As<ast::type::AccessControl>()->access_control(),
+  ASSERT_TRUE(ac->Is<type::AccessControl>());
+  EXPECT_EQ(ac->As<type::AccessControl>()->access_control(),
             ast::AccessControl::kReadOnly);
 
-  auto* t = ac->As<ast::type::AccessControl>()->type();
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::StorageTexture>());
-  EXPECT_EQ(t->As<ast::type::StorageTexture>()->image_format(),
-            ast::type::ImageFormat::kR8Unorm);
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k1d);
+  auto* t = ac->As<type::AccessControl>()->type();
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::StorageTexture>());
+  EXPECT_EQ(t->As<type::StorageTexture>()->image_format(),
+            type::ImageFormat::kR8Unorm);
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k1d);
 }
 
 TEST_F(ParserImplTest,
@@ -324,17 +314,16 @@
   EXPECT_FALSE(ac.errored);
   ASSERT_NE(ac.value, nullptr);
 
-  ASSERT_TRUE(ac->Is<ast::type::AccessControl>());
-  EXPECT_EQ(ac->As<ast::type::AccessControl>()->access_control(),
+  ASSERT_TRUE(ac->Is<type::AccessControl>());
+  EXPECT_EQ(ac->As<type::AccessControl>()->access_control(),
             ast::AccessControl::kWriteOnly);
 
-  auto* t = ac->As<ast::type::AccessControl>()->type();
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::StorageTexture>());
-  EXPECT_EQ(t->As<ast::type::StorageTexture>()->image_format(),
-            ast::type::ImageFormat::kR16Float);
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k2d);
+  auto* t = ac->As<type::AccessControl>()->type();
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::StorageTexture>());
+  EXPECT_EQ(t->As<type::StorageTexture>()->image_format(),
+            type::ImageFormat::kR16Float);
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k2d);
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_StorageTexture_InvalidType_Old) {
@@ -383,17 +372,16 @@
   EXPECT_FALSE(ac.errored);
   ASSERT_NE(ac.value, nullptr);
 
-  ASSERT_TRUE(ac->Is<ast::type::AccessControl>());
-  EXPECT_EQ(ac->As<ast::type::AccessControl>()->access_control(),
+  ASSERT_TRUE(ac->Is<type::AccessControl>());
+  EXPECT_EQ(ac->As<type::AccessControl>()->access_control(),
             ast::AccessControl::kReadOnly);
 
-  auto* t = ac->As<ast::type::AccessControl>()->type();
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::StorageTexture>());
-  EXPECT_EQ(t->As<ast::type::StorageTexture>()->image_format(),
-            ast::type::ImageFormat::kR8Unorm);
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k1d);
+  auto* t = ac->As<type::AccessControl>()->type();
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::StorageTexture>());
+  EXPECT_EQ(t->As<type::StorageTexture>()->image_format(),
+            type::ImageFormat::kR8Unorm);
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k1d);
 }
 
 TEST_F(ParserImplTest,
@@ -405,17 +393,16 @@
   EXPECT_FALSE(ac.errored);
   ASSERT_NE(ac.value, nullptr);
 
-  ASSERT_TRUE(ac->Is<ast::type::AccessControl>());
-  EXPECT_EQ(ac->As<ast::type::AccessControl>()->access_control(),
+  ASSERT_TRUE(ac->Is<type::AccessControl>());
+  EXPECT_EQ(ac->As<type::AccessControl>()->access_control(),
             ast::AccessControl::kWriteOnly);
 
-  auto* t = ac->As<ast::type::AccessControl>()->type();
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::StorageTexture>());
-  EXPECT_EQ(t->As<ast::type::StorageTexture>()->image_format(),
-            ast::type::ImageFormat::kR16Float);
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k2d);
+  auto* t = ac->As<type::AccessControl>()->type();
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::StorageTexture>());
+  EXPECT_EQ(t->As<type::StorageTexture>()->image_format(),
+            type::ImageFormat::kR16Float);
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k2d);
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_StorageTexture_InvalidType_old) {
@@ -463,12 +450,11 @@
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
 
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::StorageTexture>());
-  EXPECT_EQ(t->As<ast::type::StorageTexture>()->image_format(),
-            ast::type::ImageFormat::kR8Unorm);
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k1d);
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::StorageTexture>());
+  EXPECT_EQ(t->As<type::StorageTexture>()->image_format(),
+            type::ImageFormat::kR8Unorm);
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k1d);
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_StorageTexture_Writeonly2dR16Float) {
@@ -479,12 +465,11 @@
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
 
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::StorageTexture>());
-  EXPECT_EQ(t->As<ast::type::StorageTexture>()->image_format(),
-            ast::type::ImageFormat::kR16Float);
-  EXPECT_EQ(t->As<ast::type::Texture>()->dim(),
-            ast::type::TextureDimension::k2d);
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::StorageTexture>());
+  EXPECT_EQ(t->As<type::StorageTexture>()->image_format(),
+            type::ImageFormat::kR16Float);
+  EXPECT_EQ(t->As<type::Texture>()->dim(), type::TextureDimension::k2d);
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_StorageTexture_InvalidType) {
diff --git a/src/reader/wgsl/parser_impl_type_alias_test.cc b/src/reader/wgsl/parser_impl_type_alias_test.cc
index efe51a0..da890b5 100644
--- a/src/reader/wgsl/parser_impl_type_alias_test.cc
+++ b/src/reader/wgsl/parser_impl_type_alias_test.cc
@@ -13,12 +13,12 @@
 // limitations under the License.
 
 #include "gtest/gtest.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/struct_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/struct_type.h"
 
 namespace tint {
 namespace reader {
@@ -29,23 +29,23 @@
   auto p = parser("type a = i32");
 
   auto& mod = p->get_module();
-  auto* i32 = mod.create<ast::type::I32>();
+  auto* i32 = mod.create<type::I32>();
 
   auto t = p->type_alias();
   EXPECT_FALSE(p->has_error());
   EXPECT_FALSE(t.errored);
   EXPECT_TRUE(t.matched);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Alias>());
-  auto* alias = t->As<ast::type::Alias>();
-  ASSERT_TRUE(alias->type()->Is<ast::type::I32>());
+  ASSERT_TRUE(t->Is<type::Alias>());
+  auto* alias = t->As<type::Alias>();
+  ASSERT_TRUE(alias->type()->Is<type::I32>());
   ASSERT_EQ(alias->type(), i32);
 }
 
 TEST_F(ParserImplTest, TypeDecl_ParsesStruct_Ident) {
   auto p = parser("type a = B");
 
-  ast::type::Struct str(p->get_module().RegisterSymbol("B"), {});
+  type::Struct str(p->get_module().RegisterSymbol("B"), {});
   p->register_constructed("B", &str);
 
   auto t = p->type_alias();
@@ -53,12 +53,12 @@
   EXPECT_FALSE(t.errored);
   EXPECT_TRUE(t.matched);
   ASSERT_NE(t.value, nullptr);
-  ASSERT_TRUE(t->Is<ast::type::Alias>());
-  auto* alias = t->As<ast::type::Alias>();
+  ASSERT_TRUE(t->Is<type::Alias>());
+  auto* alias = t->As<type::Alias>();
   EXPECT_EQ(p->get_module().SymbolToName(alias->symbol()), "a");
-  ASSERT_TRUE(alias->type()->Is<ast::type::Struct>());
+  ASSERT_TRUE(alias->type()->Is<type::Struct>());
 
-  auto* s = alias->type()->As<ast::type::Struct>();
+  auto* s = alias->type()->As<type::Struct>();
   EXPECT_EQ(s->symbol(), p->get_module().RegisterSymbol("B"));
   EXPECT_EQ(s->symbol(), p->get_module().RegisterSymbol("B"));
 }
diff --git a/src/reader/wgsl/parser_impl_type_decl_test.cc b/src/reader/wgsl/parser_impl_type_decl_test.cc
index 5bb6f9f..f82b065 100644
--- a/src/reader/wgsl/parser_impl_type_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_type_decl_test.cc
@@ -14,20 +14,20 @@
 
 #include "gtest/gtest.h"
 #include "src/ast/stride_decoration.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
 namespace reader {
@@ -48,9 +48,8 @@
 
   auto& mod = p->get_module();
 
-  auto* int_type = mod.create<ast::type::I32>();
-  auto* alias_type =
-      mod.create<ast::type::Alias>(mod.RegisterSymbol("A"), int_type);
+  auto* int_type = mod.create<type::I32>();
+  auto* alias_type = mod.create<type::Alias>(mod.RegisterSymbol("A"), int_type);
 
   p->register_constructed("A", alias_type);
 
@@ -59,9 +58,9 @@
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   EXPECT_EQ(t.value, alias_type);
-  ASSERT_TRUE(t->Is<ast::type::Alias>());
+  ASSERT_TRUE(t->Is<type::Alias>());
 
-  auto* alias = t->As<ast::type::Alias>();
+  auto* alias = t->As<type::Alias>();
   EXPECT_EQ(p->get_module().SymbolToName(alias->symbol()), "A");
   EXPECT_EQ(alias->type(), int_type);
 }
@@ -81,56 +80,56 @@
   auto p = parser("bool");
 
   auto& mod = p->get_module();
-  auto* bool_type = mod.create<ast::type::Bool>();
+  auto* bool_type = mod.create<type::Bool>();
 
   auto t = p->type_decl();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   EXPECT_EQ(t.value, bool_type);
-  ASSERT_TRUE(t->Is<ast::type::Bool>());
+  ASSERT_TRUE(t->Is<type::Bool>());
 }
 
 TEST_F(ParserImplTest, TypeDecl_F32) {
   auto p = parser("f32");
 
   auto& mod = p->get_module();
-  auto* float_type = mod.create<ast::type::F32>();
+  auto* float_type = mod.create<type::F32>();
 
   auto t = p->type_decl();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   EXPECT_EQ(t.value, float_type);
-  ASSERT_TRUE(t->Is<ast::type::F32>());
+  ASSERT_TRUE(t->Is<type::F32>());
 }
 
 TEST_F(ParserImplTest, TypeDecl_I32) {
   auto p = parser("i32");
 
   auto& mod = p->get_module();
-  auto* int_type = mod.create<ast::type::I32>();
+  auto* int_type = mod.create<type::I32>();
 
   auto t = p->type_decl();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   EXPECT_EQ(t.value, int_type);
-  ASSERT_TRUE(t->Is<ast::type::I32>());
+  ASSERT_TRUE(t->Is<type::I32>());
 }
 
 TEST_F(ParserImplTest, TypeDecl_U32) {
   auto p = parser("u32");
 
   auto& mod = p->get_module();
-  auto* uint_type = mod.create<ast::type::U32>();
+  auto* uint_type = mod.create<type::U32>();
 
   auto t = p->type_decl();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   EXPECT_EQ(t.value, uint_type);
-  ASSERT_TRUE(t->Is<ast::type::U32>());
+  ASSERT_TRUE(t->Is<type::U32>());
 }
 
 struct VecData {
@@ -152,8 +151,8 @@
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   ASSERT_FALSE(p->has_error());
-  EXPECT_TRUE(t->Is<ast::type::Vector>());
-  EXPECT_EQ(t->As<ast::type::Vector>()->size(), params.count);
+  EXPECT_TRUE(t->Is<type::Vector>());
+  EXPECT_EQ(t->As<type::Vector>()->size(), params.count);
 }
 INSTANTIATE_TEST_SUITE_P(ParserImplTest,
                          VecTest,
@@ -240,10 +239,10 @@
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   ASSERT_FALSE(p->has_error());
-  ASSERT_TRUE(t->Is<ast::type::Pointer>());
+  ASSERT_TRUE(t->Is<type::Pointer>());
 
-  auto* ptr = t->As<ast::type::Pointer>();
-  ASSERT_TRUE(ptr->type()->Is<ast::type::F32>());
+  auto* ptr = t->As<type::Pointer>();
+  ASSERT_TRUE(ptr->type()->Is<type::F32>());
   ASSERT_EQ(ptr->storage_class(), ast::StorageClass::kFunction);
 }
 
@@ -254,15 +253,15 @@
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   ASSERT_FALSE(p->has_error());
-  ASSERT_TRUE(t->Is<ast::type::Pointer>());
+  ASSERT_TRUE(t->Is<type::Pointer>());
 
-  auto* ptr = t->As<ast::type::Pointer>();
-  ASSERT_TRUE(ptr->type()->Is<ast::type::Vector>());
+  auto* ptr = t->As<type::Pointer>();
+  ASSERT_TRUE(ptr->type()->Is<type::Vector>());
   ASSERT_EQ(ptr->storage_class(), ast::StorageClass::kFunction);
 
-  auto* vec = ptr->type()->As<ast::type::Vector>();
+  auto* vec = ptr->type()->As<type::Vector>();
   ASSERT_EQ(vec->size(), 2u);
-  ASSERT_TRUE(vec->type()->Is<ast::type::F32>());
+  ASSERT_TRUE(vec->type()->Is<type::F32>());
 }
 
 TEST_F(ParserImplTest, TypeDecl_Ptr_MissingLessThan) {
@@ -352,12 +351,12 @@
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   ASSERT_FALSE(p->has_error());
-  ASSERT_TRUE(t->Is<ast::type::Array>());
+  ASSERT_TRUE(t->Is<type::Array>());
 
-  auto* a = t->As<ast::type::Array>();
+  auto* a = t->As<type::Array>();
   ASSERT_FALSE(a->IsRuntimeArray());
   ASSERT_EQ(a->size(), 5u);
-  ASSERT_TRUE(a->type()->Is<ast::type::F32>());
+  ASSERT_TRUE(a->type()->Is<type::F32>());
   ASSERT_FALSE(a->has_array_stride());
 }
 
@@ -368,12 +367,12 @@
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   ASSERT_FALSE(p->has_error());
-  ASSERT_TRUE(t->Is<ast::type::Array>());
+  ASSERT_TRUE(t->Is<type::Array>());
 
-  auto* a = t->As<ast::type::Array>();
+  auto* a = t->As<type::Array>();
   ASSERT_FALSE(a->IsRuntimeArray());
   ASSERT_EQ(a->size(), 5u);
-  ASSERT_TRUE(a->type()->Is<ast::type::F32>());
+  ASSERT_TRUE(a->type()->Is<type::F32>());
   ASSERT_TRUE(a->has_array_stride());
   EXPECT_EQ(a->array_stride(), 16u);
 }
@@ -385,11 +384,11 @@
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   ASSERT_FALSE(p->has_error());
-  ASSERT_TRUE(t->Is<ast::type::Array>());
+  ASSERT_TRUE(t->Is<type::Array>());
 
-  auto* a = t->As<ast::type::Array>();
+  auto* a = t->As<type::Array>();
   ASSERT_TRUE(a->IsRuntimeArray());
-  ASSERT_TRUE(a->type()->Is<ast::type::F32>());
+  ASSERT_TRUE(a->type()->Is<type::F32>());
   ASSERT_TRUE(a->has_array_stride());
   EXPECT_EQ(a->array_stride(), 16u);
 }
@@ -401,11 +400,11 @@
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   ASSERT_FALSE(p->has_error());
-  ASSERT_TRUE(t->Is<ast::type::Array>());
+  ASSERT_TRUE(t->Is<type::Array>());
 
-  auto* a = t->As<ast::type::Array>();
+  auto* a = t->As<type::Array>();
   ASSERT_TRUE(a->IsRuntimeArray());
-  ASSERT_TRUE(a->type()->Is<ast::type::F32>());
+  ASSERT_TRUE(a->type()->Is<type::F32>());
 
   auto& decos = a->decorations();
   ASSERT_EQ(decos.size(), 2u);
@@ -422,11 +421,11 @@
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   ASSERT_FALSE(p->has_error());
-  ASSERT_TRUE(t->Is<ast::type::Array>());
+  ASSERT_TRUE(t->Is<type::Array>());
 
-  auto* a = t->As<ast::type::Array>();
+  auto* a = t->As<type::Array>();
   ASSERT_TRUE(a->IsRuntimeArray());
-  ASSERT_TRUE(a->type()->Is<ast::type::F32>());
+  ASSERT_TRUE(a->type()->Is<type::F32>());
 
   auto& decos = a->decorations();
   ASSERT_EQ(decos.size(), 2u);
@@ -525,11 +524,11 @@
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   ASSERT_FALSE(p->has_error());
-  ASSERT_TRUE(t->Is<ast::type::Array>());
+  ASSERT_TRUE(t->Is<type::Array>());
 
-  auto* a = t->As<ast::type::Array>();
+  auto* a = t->As<type::Array>();
   ASSERT_TRUE(a->IsRuntimeArray());
-  ASSERT_TRUE(a->type()->Is<ast::type::U32>());
+  ASSERT_TRUE(a->type()->Is<type::U32>());
 }
 
 TEST_F(ParserImplTest, TypeDecl_Array_BadType) {
@@ -622,8 +621,8 @@
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   ASSERT_FALSE(p->has_error());
-  EXPECT_TRUE(t->Is<ast::type::Matrix>());
-  auto* mat = t->As<ast::type::Matrix>();
+  EXPECT_TRUE(t->Is<type::Matrix>());
+  auto* mat = t->As<type::Matrix>();
   EXPECT_EQ(mat->rows(), params.rows);
   EXPECT_EQ(mat->columns(), params.columns);
 }
@@ -740,49 +739,49 @@
   auto p = parser("sampler");
 
   auto& mod = p->get_module();
-  auto* type = mod.create<ast::type::Sampler>(ast::type::SamplerKind::kSampler);
+  auto* type = mod.create<type::Sampler>(type::SamplerKind::kSampler);
 
   auto t = p->type_decl();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   EXPECT_EQ(t.value, type);
-  ASSERT_TRUE(t->Is<ast::type::Sampler>());
-  ASSERT_FALSE(t->As<ast::type::Sampler>()->IsComparison());
+  ASSERT_TRUE(t->Is<type::Sampler>());
+  ASSERT_FALSE(t->As<type::Sampler>()->IsComparison());
 }
 
 TEST_F(ParserImplTest, TypeDecl_Texture_Old) {
   auto p = parser("texture_sampled_cube<f32>");
 
   auto& mod = p->get_module();
-  auto* type = mod.create<ast::type::SampledTexture>(
-      ast::type::TextureDimension::kCube, ty.f32);
+  auto* type =
+      mod.create<type::SampledTexture>(type::TextureDimension::kCube, ty.f32);
 
   auto t = p->type_decl();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr) << p->error();
   EXPECT_EQ(t.value, type);
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::SampledTexture>());
-  ASSERT_TRUE(t->As<ast::type::SampledTexture>()->type()->Is<ast::type::F32>());
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::SampledTexture>());
+  ASSERT_TRUE(t->As<type::SampledTexture>()->type()->Is<type::F32>());
 }
 
 TEST_F(ParserImplTest, TypeDecl_Texture) {
   auto p = parser("texture_cube<f32>");
 
   auto& mod = p->get_module();
-  auto* type = mod.create<ast::type::SampledTexture>(
-      ast::type::TextureDimension::kCube, ty.f32);
+  auto* type =
+      mod.create<type::SampledTexture>(type::TextureDimension::kCube, ty.f32);
 
   auto t = p->type_decl();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
   ASSERT_NE(t.value, nullptr);
   EXPECT_EQ(t.value, type);
-  ASSERT_TRUE(t->Is<ast::type::Texture>());
-  ASSERT_TRUE(t->Is<ast::type::SampledTexture>());
-  ASSERT_TRUE(t->As<ast::type::SampledTexture>()->type()->Is<ast::type::F32>());
+  ASSERT_TRUE(t->Is<type::Texture>());
+  ASSERT_TRUE(t->Is<type::SampledTexture>());
+  ASSERT_TRUE(t->As<type::SampledTexture>()->type()->Is<type::F32>());
 }
 
 }  // namespace
diff --git a/src/reader/wgsl/parser_impl_variable_decl_test.cc b/src/reader/wgsl/parser_impl_variable_decl_test.cc
index 3e30af0..51189d5 100644
--- a/src/reader/wgsl/parser_impl_variable_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_decl_test.cc
@@ -13,10 +13,10 @@
 // limitations under the License.
 
 #include "gtest/gtest.h"
-#include "src/ast/type/f32_type.h"
 #include "src/ast/variable.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/f32_type.h"
 
 namespace tint {
 namespace reader {
@@ -31,7 +31,7 @@
   EXPECT_FALSE(v.errored);
   EXPECT_EQ(v->name, "my_var");
   EXPECT_NE(v->type, nullptr);
-  EXPECT_TRUE(v->type->Is<ast::type::F32>());
+  EXPECT_TRUE(v->type->Is<type::F32>());
 
   EXPECT_EQ(v->source.range.begin.line, 1u);
   EXPECT_EQ(v->source.range.begin.column, 5u);
@@ -66,7 +66,7 @@
   EXPECT_FALSE(v.errored);
   EXPECT_FALSE(p->has_error());
   EXPECT_EQ(v->name, "my_var");
-  EXPECT_TRUE(v->type->Is<ast::type::F32>());
+  EXPECT_TRUE(v->type->Is<type::F32>());
   EXPECT_EQ(v->storage_class, ast::StorageClass::kPrivate);
 
   EXPECT_EQ(v->source.range.begin.line, 1u);
diff --git a/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc b/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
index b8763fe..86e423c 100644
--- a/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
@@ -15,12 +15,12 @@
 #include "gtest/gtest.h"
 #include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/struct_type.h"
 #include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
+#include "src/type/access_control_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/struct_type.h"
 
 namespace tint {
 namespace reader {
@@ -34,7 +34,7 @@
   ASSERT_FALSE(decl.errored);
   ASSERT_EQ(decl->name, "my_var");
   ASSERT_NE(decl->type, nullptr);
-  ASSERT_TRUE(decl->type->Is<ast::type::F32>());
+  ASSERT_TRUE(decl->type->Is<type::F32>());
 
   ASSERT_EQ(decl->source.range.begin.line, 1u);
   ASSERT_EQ(decl->source.range.begin.column, 1u);
@@ -90,11 +90,11 @@
   ASSERT_FALSE(decl.errored);
   ASSERT_EQ(decl->name, "my_var");
   ASSERT_NE(decl->type, nullptr);
-  ASSERT_TRUE(decl->type->Is<ast::type::AccessControl>());
-  EXPECT_TRUE(decl->type->As<ast::type::AccessControl>()->IsReadOnly());
-  ASSERT_TRUE(decl->type->As<ast::type::AccessControl>()
+  ASSERT_TRUE(decl->type->Is<type::AccessControl>());
+  EXPECT_TRUE(decl->type->As<type::AccessControl>()->IsReadOnly());
+  ASSERT_TRUE(decl->type->As<type::AccessControl>()
                   ->type()
-                  ->Is<ast::type::StorageTexture>());
+                  ->Is<type::StorageTexture>());
 }
 
 TEST_F(ParserImplTest, VariableIdentDecl_ParsesWithTextureAccessDeco_Write) {
@@ -105,11 +105,11 @@
   ASSERT_FALSE(decl.errored);
   ASSERT_EQ(decl->name, "my_var");
   ASSERT_NE(decl->type, nullptr);
-  ASSERT_TRUE(decl->type->Is<ast::type::AccessControl>());
-  EXPECT_TRUE(decl->type->As<ast::type::AccessControl>()->IsWriteOnly());
-  ASSERT_TRUE(decl->type->As<ast::type::AccessControl>()
+  ASSERT_TRUE(decl->type->Is<type::AccessControl>());
+  EXPECT_TRUE(decl->type->As<type::AccessControl>()->IsWriteOnly());
+  ASSERT_TRUE(decl->type->As<type::AccessControl>()
                   ->type()
-                  ->Is<ast::type::StorageTexture>());
+                  ->Is<type::StorageTexture>());
 }
 
 TEST_F(ParserImplTest, VariableIdentDecl_ParsesWithAccessDeco_Read) {
@@ -133,8 +133,8 @@
   ASSERT_FALSE(decl.errored);
   ASSERT_EQ(decl->name, "my_var");
   ASSERT_NE(decl->type, nullptr);
-  ASSERT_TRUE(decl->type->Is<ast::type::AccessControl>());
-  EXPECT_TRUE(decl->type->As<ast::type::AccessControl>()->IsReadOnly());
+  ASSERT_TRUE(decl->type->Is<type::AccessControl>());
+  EXPECT_TRUE(decl->type->As<type::AccessControl>()->IsReadOnly());
 }
 
 TEST_F(ParserImplTest, VariableIdentDecl_ParsesWithAccessDeco_ReadWrite) {
@@ -158,8 +158,8 @@
   ASSERT_FALSE(decl.errored);
   ASSERT_EQ(decl->name, "my_var");
   ASSERT_NE(decl->type, nullptr);
-  ASSERT_TRUE(decl->type->Is<ast::type::AccessControl>());
-  EXPECT_TRUE(decl->type->As<ast::type::AccessControl>()->IsReadWrite());
+  ASSERT_TRUE(decl->type->Is<type::AccessControl>());
+  EXPECT_TRUE(decl->type->As<type::AccessControl>()->IsReadWrite());
 }
 
 TEST_F(ParserImplTest, VariableIdentDecl_MultipleAccessDecoFail) {
diff --git a/src/scope_stack_test.cc b/src/scope_stack_test.cc
index 7e58c35..f5c9f84 100644
--- a/src/scope_stack_test.cc
+++ b/src/scope_stack_test.cc
@@ -15,9 +15,9 @@
 
 #include "gtest/gtest.h"
 #include "src/ast/builder.h"
-#include "src/ast/type/f32_type.h"
 #include "src/ast/variable.h"
 #include "src/symbol.h"
+#include "src/type/f32_type.h"
 
 namespace tint {
 namespace {
diff --git a/src/transform/bound_array_accessors.cc b/src/transform/bound_array_accessors.cc
index c7ce85e..bdfb938 100644
--- a/src/transform/bound_array_accessors.cc
+++ b/src/transform/bound_array_accessors.cc
@@ -39,15 +39,15 @@
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/array_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
 namespace transform {
@@ -71,8 +71,8 @@
     ast::CloneContext* ctx,
     diag::List* diags) {
   auto* ret_type = expr->array()->result_type()->UnwrapAll();
-  if (!ret_type->Is<ast::type::Array>() && !ret_type->Is<ast::type::Matrix>() &&
-      !ret_type->Is<ast::type::Vector>()) {
+  if (!ret_type->Is<type::Array>() && !ret_type->Is<type::Matrix>() &&
+      !ret_type->Is<type::Vector>()) {
     return nullptr;
   }
 
@@ -80,15 +80,15 @@
   using u32 = ast::Builder::u32;
 
   uint32_t size = 0;
-  bool is_vec = ret_type->Is<ast::type::Vector>();
-  bool is_arr = ret_type->Is<ast::type::Array>();
+  bool is_vec = ret_type->Is<type::Vector>();
+  bool is_arr = ret_type->Is<type::Array>();
   if (is_vec || is_arr) {
-    size = is_vec ? ret_type->As<ast::type::Vector>()->size()
-                  : ret_type->As<ast::type::Array>()->size();
+    size = is_vec ? ret_type->As<type::Vector>()->size()
+                  : ret_type->As<type::Array>()->size();
   } else {
     // The row accessor would have been an embedded array accessor and already
     // handled, so we just need to do columns here.
-    size = ret_type->As<ast::type::Matrix>()->columns();
+    size = ret_type->As<type::Matrix>()->columns();
   }
 
   auto* const old_idx = expr->idx_expr();
diff --git a/src/transform/emit_vertex_point_size.cc b/src/transform/emit_vertex_point_size.cc
index 1628d63..a46a958 100644
--- a/src/transform/emit_vertex_point_size.cc
+++ b/src/transform/emit_vertex_point_size.cc
@@ -23,9 +23,9 @@
 #include "src/ast/float_literal.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type_manager.h"
 #include "src/ast/variable.h"
+#include "src/type/f32_type.h"
+#include "src/type/type_manager.h"
 
 namespace tint {
 namespace transform {
@@ -47,7 +47,7 @@
     return out;
   }
 
-  auto* f32 = out.module.create<ast::type::F32>();
+  auto* f32 = out.module.create<type::F32>();
 
   // Declare the pointsize builtin output variable.
   auto* pointsize_var = out.module.create<ast::Variable>(
diff --git a/src/transform/first_index_offset.cc b/src/transform/first_index_offset.cc
index 7e6bfda..df878ac 100644
--- a/src/transform/first_index_offset.cc
+++ b/src/transform/first_index_offset.cc
@@ -42,13 +42,13 @@
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_offset_decoration.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
 #include "src/ast/variable_decoration.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
 #include "src/type_determiner.h"
 
 namespace tint {
@@ -196,7 +196,7 @@
 }
 
 ast::Variable* FirstIndexOffset::AddUniformBuffer(ast::Module* mod) {
-  auto* u32_type = mod->create<ast::type::U32>();
+  auto* u32_type = mod->create<type::U32>();
   ast::StructMemberList members;
   uint32_t offset = 0;
   if (has_vertex_index_) {
@@ -224,7 +224,7 @@
   ast::StructDecorationList decos;
   decos.push_back(mod->create<ast::StructBlockDecoration>(Source{}));
 
-  auto* struct_type = mod->create<ast::type::Struct>(
+  auto* struct_type = mod->create<type::Struct>(
       mod->RegisterSymbol(kStructName),
       mod->create<ast::Struct>(Source{}, std::move(members), std::move(decos)));
 
@@ -268,9 +268,9 @@
       mod->create<ast::Variable>(Source{},                            // source
                                  mod->RegisterSymbol(original_name),  // symbol
                                  ast::StorageClass::kNone,  // storage_class
-                                 mod->create<ast::type::U32>(),   // type
-                                 true,                            // is_const
-                                 constructor,                     // constructor
+                                 mod->create<type::U32>(),  // type
+                                 true,                      // is_const
+                                 constructor,               // constructor
                                  ast::VariableDecorationList{});  // decorations
   return mod->create<ast::VariableDeclStatement>(Source{}, var);
 }
diff --git a/src/transform/vertex_pulling.cc b/src/transform/vertex_pulling.cc
index ae121f4..24f6da6 100644
--- a/src/transform/vertex_pulling.cc
+++ b/src/transform/vertex_pulling.cc
@@ -29,16 +29,16 @@
 #include "src/ast/struct_decoration.h"
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/array_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
 namespace transform {
@@ -261,7 +261,7 @@
 void VertexPulling::State::AddVertexStorageBuffers() {
   // TODO(idanr): Make this readonly https://github.com/gpuweb/gpuweb/issues/935
   // The array inside the struct definition
-  auto* internal_array_type = out->create<ast::type::Array>(
+  auto* internal_array_type = out->create<type::Array>(
       GetU32Type(), 0,
       ast::ArrayDecorationList{
           out->create<ast::StrideDecoration>(Source{}, 4u),
@@ -280,7 +280,7 @@
   ast::StructDecorationList decos;
   decos.push_back(out->create<ast::StructBlockDecoration>(Source{}));
 
-  auto* struct_type = out->create<ast::type::Struct>(
+  auto* struct_type = out->create<type::Struct>(
       out->RegisterSymbol(kStructName),
       out->create<ast::Struct>(Source{}, std::move(members), std::move(decos)));
 
@@ -463,7 +463,7 @@
 
 ast::Expression* VertexPulling::State::AccessVec(uint32_t buffer,
                                                  uint32_t element_stride,
-                                                 ast::type::Type* base_type,
+                                                 type::Type* base_type,
                                                  VertexFormat base_format,
                                                  uint32_t count) const {
   ast::ExpressionList expr_list;
@@ -476,20 +476,20 @@
   }
 
   return out->create<ast::TypeConstructorExpression>(
-      Source{}, out->create<ast::type::Vector>(base_type, count),
+      Source{}, out->create<type::Vector>(base_type, count),
       std::move(expr_list));
 }
 
-ast::type::Type* VertexPulling::State::GetU32Type() const {
-  return out->create<ast::type::U32>();
+type::Type* VertexPulling::State::GetU32Type() const {
+  return out->create<type::U32>();
 }
 
-ast::type::Type* VertexPulling::State::GetI32Type() const {
-  return out->create<ast::type::I32>();
+type::Type* VertexPulling::State::GetI32Type() const {
+  return out->create<type::I32>();
 }
 
-ast::type::Type* VertexPulling::State::GetF32Type() const {
-  return out->create<ast::type::F32>();
+type::Type* VertexPulling::State::GetF32Type() const {
+  return out->create<type::F32>();
 }
 
 VertexBufferLayoutDescriptor::VertexBufferLayoutDescriptor() = default;
diff --git a/src/transform/vertex_pulling.h b/src/transform/vertex_pulling.h
index a09cf0f..2a75cc5 100644
--- a/src/transform/vertex_pulling.h
+++ b/src/transform/vertex_pulling.h
@@ -254,14 +254,14 @@
     /// @param count how many elements the vector has
     ast::Expression* AccessVec(uint32_t buffer,
                                uint32_t element_stride,
-                               ast::type::Type* base_type,
+                               type::Type* base_type,
                                VertexFormat base_format,
                                uint32_t count) const;
 
     // Used to grab corresponding types from the type manager
-    ast::type::Type* GetU32Type() const;
-    ast::type::Type* GetI32Type() const;
-    ast::type::Type* GetF32Type() const;
+    type::Type* GetU32Type() const;
+    type::Type* GetI32Type() const;
+    type::Type* GetF32Type() const;
 
     ast::Module* const in;
     ast::Module* const out;
diff --git a/src/ast/type/access_control_type.cc b/src/type/access_control_type.cc
similarity index 92%
rename from src/ast/type/access_control_type.cc
rename to src/type/access_control_type.cc
index 44e7cbe..82e0de1 100644
--- a/src/ast/type/access_control_type.cc
+++ b/src/type/access_control_type.cc
@@ -12,17 +12,16 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/access_control_type.h"
+#include "src/type/access_control_type.h"
 
 #include <assert.h>
 
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::AccessControl);
+TINT_INSTANTIATE_CLASS_ID(tint::type::AccessControl);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 AccessControl::AccessControl(ast::AccessControl access, Type* subtype)
@@ -64,5 +63,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/access_control_type.h b/src/type/access_control_type.h
similarity index 92%
rename from src/ast/type/access_control_type.h
rename to src/type/access_control_type.h
index e018b95..3e0da48 100644
--- a/src/ast/type/access_control_type.h
+++ b/src/type/access_control_type.h
@@ -12,16 +12,15 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_ACCESS_CONTROL_TYPE_H_
-#define SRC_AST_TYPE_ACCESS_CONTROL_TYPE_H_
+#ifndef SRC_TYPE_ACCESS_CONTROL_TYPE_H_
+#define SRC_TYPE_ACCESS_CONTROL_TYPE_H_
 
 #include <string>
 
 #include "src/ast/access_control.h"
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// An access control type. Holds an access setting and pointer to another type.
@@ -71,7 +70,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_ACCESS_CONTROL_TYPE_H_
+#endif  // SRC_TYPE_ACCESS_CONTROL_TYPE_H_
diff --git a/src/ast/type/access_control_type_test.cc b/src/type/access_control_type_test.cc
similarity index 79%
rename from src/ast/type/access_control_type_test.cc
rename to src/type/access_control_type_test.cc
index 882f144..5392336 100644
--- a/src/ast/type/access_control_type_test.cc
+++ b/src/type/access_control_type_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/access_control_type.h"
+#include "src/type/access_control_type.h"
 
 #include <memory>
 #include <utility>
@@ -22,20 +22,19 @@
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_decoration.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/test_helper.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -106,23 +105,25 @@
 
 TEST_F(AccessControlTest, MinBufferBindingSizeArray) {
   U32 u32;
-  Array array(&u32, 4, ArrayDecorationList{create<StrideDecoration>(4)});
+  Array array(&u32, 4,
+              ast::ArrayDecorationList{create<ast::StrideDecoration>(4)});
   AccessControl at{ast::AccessControl::kReadOnly, &array};
   EXPECT_EQ(16u, at.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(AccessControlTest, MinBufferBindingSizeRuntimeArray) {
   U32 u32;
-  Array array(&u32, 0, ArrayDecorationList{create<StrideDecoration>(4)});
+  Array array(&u32, 0,
+              ast::ArrayDecorationList{create<ast::StrideDecoration>(4)});
   AccessControl at{ast::AccessControl::kReadOnly, &array};
   EXPECT_EQ(4u, at.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(AccessControlTest, MinBufferBindingSizeStruct) {
   auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
-                       Member("bar", ty.u32, {MemberOffset(4)})},
-      StructDecorationList{});
+      ast::StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
+                            Member("bar", ty.u32, {MemberOffset(4)})},
+      ast::StructDecorationList{});
 
   auto* struct_type = ty.struct_("struct_type", str);
   AccessControl at{ast::AccessControl::kReadOnly, struct_type};
@@ -138,23 +139,25 @@
 
 TEST_F(AccessControlTest, BaseAlignmentArray) {
   U32 u32;
-  Array array(&u32, 4, ArrayDecorationList{create<StrideDecoration>(4)});
+  Array array(&u32, 4,
+              ast::ArrayDecorationList{create<ast::StrideDecoration>(4)});
   AccessControl at{ast::AccessControl::kReadOnly, &array};
   EXPECT_EQ(16u, at.BaseAlignment(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(AccessControlTest, BaseAlignmentRuntimeArray) {
   U32 u32;
-  Array array(&u32, 0, ArrayDecorationList{create<StrideDecoration>(4)});
+  Array array(&u32, 0,
+              ast::ArrayDecorationList{create<ast::StrideDecoration>(4)});
   AccessControl at{ast::AccessControl::kReadOnly, &array};
   EXPECT_EQ(16u, at.BaseAlignment(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(AccessControlTest, BaseAlignmentStruct) {
   auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
-                       Member("bar", ty.u32, {MemberOffset(4)})},
-      StructDecorationList{});
+      ast::StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
+                            Member("bar", ty.u32, {MemberOffset(4)})},
+      ast::StructDecorationList{});
   auto* struct_type = ty.struct_("struct_type", str);
 
   AccessControl at{ast::AccessControl::kReadOnly, struct_type};
@@ -164,5 +167,4 @@
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/alias_type.cc b/src/type/alias_type.cc
similarity index 91%
rename from src/ast/type/alias_type.cc
rename to src/type/alias_type.cc
index b8632de..1a21fea 100644
--- a/src/ast/type/alias_type.cc
+++ b/src/type/alias_type.cc
@@ -12,17 +12,16 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/alias_type.h"
+#include "src/type/alias_type.h"
 
 #include <assert.h>
 
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::Alias);
+TINT_INSTANTIATE_CLASS_ID(tint::type::Alias);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 Alias::Alias(const Symbol& sym, Type* subtype)
@@ -51,5 +50,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/alias_type.h b/src/type/alias_type.h
similarity index 91%
rename from src/ast/type/alias_type.h
rename to src/type/alias_type.h
index 7bc3bc2..c1f858d 100644
--- a/src/ast/type/alias_type.h
+++ b/src/type/alias_type.h
@@ -12,16 +12,15 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_ALIAS_TYPE_H_
-#define SRC_AST_TYPE_ALIAS_TYPE_H_
+#ifndef SRC_TYPE_ALIAS_TYPE_H_
+#define SRC_TYPE_ALIAS_TYPE_H_
 
 #include <string>
 
-#include "src/ast/type/type.h"
 #include "src/symbol.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// A type alias type. Holds a name and pointer to another type.
@@ -65,7 +64,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_ALIAS_TYPE_H_
+#endif  // SRC_TYPE_ALIAS_TYPE_H_
diff --git a/src/ast/type/alias_type_test.cc b/src/type/alias_type_test.cc
similarity index 79%
rename from src/ast/type/alias_type_test.cc
rename to src/type/alias_type_test.cc
index c1c59a4..52430f2 100644
--- a/src/ast/type/alias_type_test.cc
+++ b/src/type/alias_type_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/alias_type.h"
+#include "src/type/alias_type.h"
 
 #include <memory>
 #include <utility>
@@ -22,20 +22,19 @@
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_decoration.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/test_helper.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/texture_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -104,7 +103,7 @@
 TEST_F(AliasTest, UnwrapAll_TwiceAliasPointerTwiceAlias) {
   auto* a = ty.alias("a_type", ty.u32);
   auto* aa = ty.alias("aa_type", a);
-  Pointer paa{aa, StorageClass::kUniform};
+  Pointer paa{aa, ast::StorageClass::kUniform};
   auto* apaa = ty.alias("paa_type", &paa);
   auto* aapaa = ty.alias("aapaa_type", apaa);
 
@@ -117,8 +116,8 @@
   auto* a = ty.alias("a_type", ty.u32);
   auto* aa = ty.alias("aa_type", a);
 
-  Pointer paa{aa, StorageClass::kUniform};
-  Pointer ppaa{&paa, StorageClass::kUniform};
+  Pointer paa{aa, ast::StorageClass::kUniform};
+  Pointer ppaa{&paa, ast::StorageClass::kUniform};
   auto* appaa = ty.alias("appaa_type", &ppaa);
   EXPECT_EQ(appaa->UnwrapAll(), &paa);
 }
@@ -126,11 +125,11 @@
 TEST_F(AliasTest, UnwrapAll_SecondNonConsecutivePointerBlocksUnrapping) {
   auto* a = ty.alias("a_type", ty.u32);
   auto* aa = ty.alias("aa_type", a);
-  Pointer paa{aa, StorageClass::kUniform};
+  Pointer paa{aa, ast::StorageClass::kUniform};
 
   auto* apaa = ty.alias("apaa_type", &paa);
   auto* aapaa = ty.alias("aapaa_type", apaa);
-  Pointer paapaa{aapaa, StorageClass::kUniform};
+  Pointer paapaa{aapaa, ast::StorageClass::kUniform};
   auto* apaapaa = ty.alias("apaapaa_type", &paapaa);
 
   EXPECT_EQ(apaapaa->UnwrapAll(), &paa);
@@ -138,13 +137,13 @@
 
 TEST_F(AliasTest, UnwrapAll_AccessControlPointer) {
   AccessControl a{ast::AccessControl::kReadOnly, ty.u32};
-  Pointer pa{&a, StorageClass::kUniform};
+  Pointer pa{&a, ast::StorageClass::kUniform};
   EXPECT_EQ(pa.type(), &a);
   EXPECT_EQ(pa.UnwrapAll(), ty.u32);
 }
 
 TEST_F(AliasTest, UnwrapAll_PointerAccessControl) {
-  Pointer p{ty.u32, StorageClass::kUniform};
+  Pointer p{ty.u32, ast::StorageClass::kUniform};
   AccessControl a{ast::AccessControl::kReadOnly, &p};
 
   EXPECT_EQ(a.type(), &p);
@@ -158,8 +157,8 @@
 
 TEST_F(AliasTest, MinBufferBindingSizeArray) {
   Array array(ty.u32, 4,
-              ArrayDecorationList{
-                  create<StrideDecoration>(4),
+              ast::ArrayDecorationList{
+                  create<ast::StrideDecoration>(4),
               });
   auto* alias = ty.alias("alias", &array);
   EXPECT_EQ(16u, alias->MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -167,8 +166,8 @@
 
 TEST_F(AliasTest, MinBufferBindingSizeRuntimeArray) {
   Array array(ty.u32, 0,
-              ArrayDecorationList{
-                  create<StrideDecoration>(4),
+              ast::ArrayDecorationList{
+                  create<ast::StrideDecoration>(4),
               });
   auto* alias = ty.alias("alias", &array);
   EXPECT_EQ(4u, alias->MinBufferBindingSize(MemoryLayout::kUniformBuffer));
@@ -176,9 +175,9 @@
 
 TEST_F(AliasTest, MinBufferBindingSizeStruct) {
   auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
-                       Member("bar", ty.u32, {MemberOffset(4)})},
-      StructDecorationList{});
+      ast::StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
+                            Member("bar", ty.u32, {MemberOffset(4)})},
+      ast::StructDecorationList{});
   auto* struct_type = ty.struct_("struct_type", str);
   auto* alias = ty.alias("alias", struct_type);
 
@@ -193,8 +192,8 @@
 
 TEST_F(AliasTest, BaseAlignmentArray) {
   Array array(ty.u32, 4,
-              ArrayDecorationList{
-                  create<StrideDecoration>(4),
+              ast::ArrayDecorationList{
+                  create<ast::StrideDecoration>(4),
               });
   auto* alias = ty.alias("alias", &array);
   EXPECT_EQ(16u, alias->BaseAlignment(MemoryLayout::kUniformBuffer));
@@ -202,8 +201,8 @@
 
 TEST_F(AliasTest, BaseAlignmentRuntimeArray) {
   Array array(ty.u32, 0,
-              ArrayDecorationList{
-                  create<StrideDecoration>(4),
+              ast::ArrayDecorationList{
+                  create<ast::StrideDecoration>(4),
               });
   auto* alias = ty.alias("alias", &array);
   EXPECT_EQ(16u, alias->BaseAlignment(MemoryLayout::kUniformBuffer));
@@ -211,9 +210,9 @@
 
 TEST_F(AliasTest, BaseAlignmentStruct) {
   auto* str = create<ast::Struct>(
-      StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
-                       Member("bar", ty.u32, {MemberOffset(4)})},
-      StructDecorationList{});
+      ast::StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
+                            Member("bar", ty.u32, {MemberOffset(4)})},
+      ast::StructDecorationList{});
   auto* struct_type = ty.struct_("struct_type", str);
   auto* alias = ty.alias("alias", struct_type);
 
@@ -223,5 +222,4 @@
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/array_type.cc b/src/type/array_type.cc
similarity index 89%
rename from src/ast/type/array_type.cc
rename to src/type/array_type.cc
index be71ad7..7793f03 100644
--- a/src/ast/type/array_type.cc
+++ b/src/type/array_type.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/array_type.h"
+#include "src/type/array_type.h"
 
 #include <cmath>
 #include <memory>
@@ -20,15 +20,14 @@
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 #include "src/ast/stride_decoration.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/vector_type.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::Array);
+TINT_INSTANTIATE_CLASS_ID(tint::type::Array);
 
 namespace tint {
-namespace ast {
 namespace type {
 
-Array::Array(Type* subtype, uint32_t size, ArrayDecorationList decorations)
+Array::Array(Type* subtype, uint32_t size, ast::ArrayDecorationList decorations)
     : subtype_(subtype), size_(size), decos_(decorations) {}
 
 Array::Array(Array&&) = default;
@@ -68,7 +67,7 @@
 
 uint32_t Array::array_stride() const {
   for (auto* deco : decos_) {
-    if (auto* stride = deco->As<StrideDecoration>()) {
+    if (auto* stride = deco->As<ast::StrideDecoration>()) {
       return stride->stride();
     }
   }
@@ -77,7 +76,7 @@
 
 bool Array::has_array_stride() const {
   for (auto* deco : decos_) {
-    if (deco->Is<StrideDecoration>()) {
+    if (deco->Is<ast::StrideDecoration>()) {
       return true;
     }
   }
@@ -102,5 +101,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/array_type.h b/src/type/array_type.h
similarity index 87%
rename from src/ast/type/array_type.h
rename to src/type/array_type.h
index eafb204..404fa3b 100644
--- a/src/ast/type/array_type.h
+++ b/src/type/array_type.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_ARRAY_TYPE_H_
-#define SRC_AST_TYPE_ARRAY_TYPE_H_
+#ifndef SRC_TYPE_ARRAY_TYPE_H_
+#define SRC_TYPE_ARRAY_TYPE_H_
 
 #include <assert.h>
 
@@ -21,10 +21,9 @@
 #include <utility>
 
 #include "src/ast/array_decoration.h"
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// An array type. If size is zero then it is a runtime array.
@@ -35,7 +34,7 @@
   /// @param size the number of elements in the array. `0` represents a
   /// runtime-sized array.
   /// @param decorations the array decorations
-  Array(Type* subtype, uint32_t size, ArrayDecorationList decorations);
+  Array(Type* subtype, uint32_t size, ast::ArrayDecorationList decorations);
   /// Move constructor
   Array(Array&&);
   ~Array() override;
@@ -55,7 +54,7 @@
   uint64_t BaseAlignment(MemoryLayout mem_layout) const override;
 
   /// @returns the array decorations
-  const ArrayDecorationList& decorations() const { return decos_; }
+  const ast::ArrayDecorationList& decorations() const { return decos_; }
 
   /// @returns the array stride or 0 if none set.
   uint32_t array_stride() const;
@@ -78,11 +77,10 @@
  private:
   Type* const subtype_;
   uint32_t const size_;
-  ArrayDecorationList const decos_;
+  ast::ArrayDecorationList const decos_;
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_ARRAY_TYPE_H_
+#endif  // SRC_TYPE_ARRAY_TYPE_H_
diff --git a/src/ast/type/array_type_test.cc b/src/type/array_type_test.cc
similarity index 70%
rename from src/ast/type/array_type_test.cc
rename to src/type/array_type_test.cc
index 8d61e27..54bc12a 100644
--- a/src/ast/type/array_type_test.cc
+++ b/src/type/array_type_test.cc
@@ -12,26 +12,25 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/array_type.h"
+#include "src/type/array_type.h"
 
 #include <memory>
 #include <utility>
 
 #include "src/ast/stride_decoration.h"
-#include "src/ast/test_helper.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -39,7 +38,7 @@
 
 TEST_F(ArrayTest, CreateSizedArray) {
   U32 u32;
-  Array arr{&u32, 3, ArrayDecorationList{}};
+  Array arr{&u32, 3, ast::ArrayDecorationList{}};
   EXPECT_EQ(arr.type(), &u32);
   EXPECT_EQ(arr.size(), 3u);
   EXPECT_TRUE(arr.Is<Array>());
@@ -48,7 +47,7 @@
 
 TEST_F(ArrayTest, CreateRuntimeArray) {
   U32 u32;
-  Array arr{&u32, 0, ArrayDecorationList{}};
+  Array arr{&u32, 0, ast::ArrayDecorationList{}};
   EXPECT_EQ(arr.type(), &u32);
   EXPECT_EQ(arr.size(), 0u);
   EXPECT_TRUE(arr.Is<Array>());
@@ -58,7 +57,7 @@
 TEST_F(ArrayTest, Is) {
   I32 i32;
 
-  Array arr{&i32, 3, ArrayDecorationList{}};
+  Array arr{&i32, 3, ast::ArrayDecorationList{}};
   Type* ty = &arr;
   EXPECT_FALSE(ty->Is<AccessControl>());
   EXPECT_FALSE(ty->Is<Alias>());
@@ -77,55 +76,59 @@
 
 TEST_F(ArrayTest, TypeName) {
   I32 i32;
-  Array arr{&i32, 0, ArrayDecorationList{}};
+  Array arr{&i32, 0, ast::ArrayDecorationList{}};
   EXPECT_EQ(arr.type_name(), "__array__i32");
 }
 
 TEST_F(ArrayTest, TypeName_RuntimeArray) {
   I32 i32;
-  Array arr{&i32, 3, ArrayDecorationList{}};
+  Array arr{&i32, 3, ast::ArrayDecorationList{}};
   EXPECT_EQ(arr.type_name(), "__array__i32_3");
 }
 
 TEST_F(ArrayTest, TypeName_WithStride) {
   I32 i32;
-  Array arr{&i32, 3, ArrayDecorationList{create<StrideDecoration>(16)}};
+  Array arr{&i32, 3,
+            ast::ArrayDecorationList{create<ast::StrideDecoration>(16)}};
   EXPECT_EQ(arr.type_name(), "__array__i32_3_stride_16");
 }
 
 TEST_F(ArrayTest, MinBufferBindingSizeNoStride) {
   U32 u32;
-  Array arr(&u32, 4, ArrayDecorationList{});
+  Array arr(&u32, 4, ast::ArrayDecorationList{});
   EXPECT_EQ(0u, arr.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(ArrayTest, MinBufferBindingSizeArray) {
   U32 u32;
-  Array arr(&u32, 4, ArrayDecorationList{create<StrideDecoration>(4)});
+  Array arr(&u32, 4,
+            ast::ArrayDecorationList{create<ast::StrideDecoration>(4)});
   EXPECT_EQ(16u, arr.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(ArrayTest, MinBufferBindingSizeRuntimeArray) {
   U32 u32;
-  Array arr(&u32, 0, ArrayDecorationList{create<StrideDecoration>(4)});
+  Array arr(&u32, 0,
+            ast::ArrayDecorationList{create<ast::StrideDecoration>(4)});
   EXPECT_EQ(4u, arr.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(ArrayTest, BaseAlignmentArray) {
   U32 u32;
-  Array arr(&u32, 4, ArrayDecorationList{create<StrideDecoration>(4)});
+  Array arr(&u32, 4,
+            ast::ArrayDecorationList{create<ast::StrideDecoration>(4)});
   EXPECT_EQ(16u, arr.BaseAlignment(MemoryLayout::kUniformBuffer));
   EXPECT_EQ(4u, arr.BaseAlignment(MemoryLayout::kStorageBuffer));
 }
 
 TEST_F(ArrayTest, BaseAlignmentRuntimeArray) {
   U32 u32;
-  Array arr(&u32, 0, ArrayDecorationList{create<StrideDecoration>(4)});
+  Array arr(&u32, 0,
+            ast::ArrayDecorationList{create<ast::StrideDecoration>(4)});
   EXPECT_EQ(16u, arr.BaseAlignment(MemoryLayout::kUniformBuffer));
   EXPECT_EQ(4u, arr.BaseAlignment(MemoryLayout::kStorageBuffer));
 }
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/bool_type.cc b/src/type/bool_type.cc
similarity index 88%
rename from src/ast/type/bool_type.cc
rename to src/type/bool_type.cc
index 7c26c86..ead02f8 100644
--- a/src/ast/type/bool_type.cc
+++ b/src/type/bool_type.cc
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/bool_type.h"
+#include "src/type/bool_type.h"
 
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::Bool);
+TINT_INSTANTIATE_CLASS_ID(tint::type::Bool);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 Bool::Bool() = default;
@@ -38,5 +37,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/bool_type.h b/src/type/bool_type.h
similarity index 86%
rename from src/ast/type/bool_type.h
rename to src/type/bool_type.h
index 11f5338..fa3f01d 100644
--- a/src/ast/type/bool_type.h
+++ b/src/type/bool_type.h
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_BOOL_TYPE_H_
-#define SRC_AST_TYPE_BOOL_TYPE_H_
+#ifndef SRC_TYPE_BOOL_TYPE_H_
+#define SRC_TYPE_BOOL_TYPE_H_
 
 #include <string>
 
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// A boolean type
@@ -42,7 +41,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_BOOL_TYPE_H_
+#endif  // SRC_TYPE_BOOL_TYPE_H_
diff --git a/src/ast/type/bool_type_test.cc b/src/type/bool_type_test.cc
similarity index 74%
rename from src/ast/type/bool_type_test.cc
rename to src/type/bool_type_test.cc
index d6c6f25..552857b 100644
--- a/src/ast/type/bool_type_test.cc
+++ b/src/type/bool_type_test.cc
@@ -12,22 +12,21 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/bool_type.h"
+#include "src/type/bool_type.h"
 
-#include "src/ast/test_helper.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -63,5 +62,4 @@
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/depth_texture_type.cc b/src/type/depth_texture_type.cc
similarity index 91%
rename from src/ast/type/depth_texture_type.cc
rename to src/type/depth_texture_type.cc
index 95b55aa..770ced4 100644
--- a/src/ast/type/depth_texture_type.cc
+++ b/src/type/depth_texture_type.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/depth_texture_type.h"
+#include "src/type/depth_texture_type.h"
 
 #include <cassert>
 #include <sstream>
@@ -20,10 +20,9 @@
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::DepthTexture);
+TINT_INSTANTIATE_CLASS_ID(tint::type::DepthTexture);
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -57,5 +56,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/depth_texture_type.h b/src/type/depth_texture_type.h
similarity index 85%
rename from src/ast/type/depth_texture_type.h
rename to src/type/depth_texture_type.h
index 02f07d3..43eed57 100644
--- a/src/ast/type/depth_texture_type.h
+++ b/src/type/depth_texture_type.h
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_DEPTH_TEXTURE_TYPE_H_
-#define SRC_AST_TYPE_DEPTH_TEXTURE_TYPE_H_
+#ifndef SRC_TYPE_DEPTH_TEXTURE_TYPE_H_
+#define SRC_TYPE_DEPTH_TEXTURE_TYPE_H_
 
 #include <string>
 
-#include "src/ast/type/texture_type.h"
+#include "src/type/texture_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// A depth texture type.
@@ -43,7 +42,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_DEPTH_TEXTURE_TYPE_H_
+#endif  // SRC_TYPE_DEPTH_TEXTURE_TYPE_H_
diff --git a/src/ast/type/depth_texture_type_test.cc b/src/type/depth_texture_type_test.cc
similarity index 76%
rename from src/ast/type/depth_texture_type_test.cc
rename to src/type/depth_texture_type_test.cc
index b956f89..26be3e9 100644
--- a/src/ast/type/depth_texture_type_test.cc
+++ b/src/type/depth_texture_type_test.cc
@@ -12,25 +12,24 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/depth_texture_type.h"
+#include "src/type/depth_texture_type.h"
 
-#include "src/ast/test_helper.h"
+#include "src/type/test_helper.h"
 
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -79,5 +78,4 @@
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/f32_type.cc b/src/type/f32_type.cc
similarity index 89%
rename from src/ast/type/f32_type.cc
rename to src/type/f32_type.cc
index bfcdc69..4961187 100644
--- a/src/ast/type/f32_type.cc
+++ b/src/type/f32_type.cc
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/f32_type.h"
+#include "src/type/f32_type.h"
 
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::F32);
+TINT_INSTANTIATE_CLASS_ID(tint::type::F32);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 F32::F32() = default;
@@ -46,5 +45,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/f32_type.h b/src/type/f32_type.h
similarity index 90%
rename from src/ast/type/f32_type.h
rename to src/type/f32_type.h
index 86187f3..55e4224 100644
--- a/src/ast/type/f32_type.h
+++ b/src/type/f32_type.h
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_F32_TYPE_H_
-#define SRC_AST_TYPE_F32_TYPE_H_
+#ifndef SRC_TYPE_F32_TYPE_H_
+#define SRC_TYPE_F32_TYPE_H_
 
 #include <string>
 
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// A float 32 type
@@ -52,7 +51,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_F32_TYPE_H_
+#endif  // SRC_TYPE_F32_TYPE_H_
diff --git a/src/ast/type/f32_type_test.cc b/src/type/f32_type_test.cc
similarity index 75%
rename from src/ast/type/f32_type_test.cc
rename to src/type/f32_type_test.cc
index 0570b7e..7a25dc7 100644
--- a/src/ast/type/f32_type_test.cc
+++ b/src/type/f32_type_test.cc
@@ -12,22 +12,21 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/f32_type.h"
+#include "src/type/f32_type.h"
 
-#include "src/ast/test_helper.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -68,5 +67,4 @@
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/i32_type.cc b/src/type/i32_type.cc
similarity index 89%
rename from src/ast/type/i32_type.cc
rename to src/type/i32_type.cc
index 6b47eb3..29fee5e 100644
--- a/src/ast/type/i32_type.cc
+++ b/src/type/i32_type.cc
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::I32);
+TINT_INSTANTIATE_CLASS_ID(tint::type::I32);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 I32::I32() = default;
@@ -46,5 +45,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/i32_type.h b/src/type/i32_type.h
similarity index 90%
rename from src/ast/type/i32_type.h
rename to src/type/i32_type.h
index 104d593..cb4421f 100644
--- a/src/ast/type/i32_type.h
+++ b/src/type/i32_type.h
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_I32_TYPE_H_
-#define SRC_AST_TYPE_I32_TYPE_H_
+#ifndef SRC_TYPE_I32_TYPE_H_
+#define SRC_TYPE_I32_TYPE_H_
 
 #include <string>
 
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// A signed int 32 type.
@@ -52,7 +51,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_I32_TYPE_H_
+#endif  // SRC_TYPE_I32_TYPE_H_
diff --git a/src/ast/type/i32_type_test.cc b/src/type/i32_type_test.cc
similarity index 75%
rename from src/ast/type/i32_type_test.cc
rename to src/type/i32_type_test.cc
index 0333d01..0fa098a 100644
--- a/src/ast/type/i32_type_test.cc
+++ b/src/type/i32_type_test.cc
@@ -12,22 +12,21 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 
-#include "src/ast/test_helper.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -68,5 +67,4 @@
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/matrix_type.cc b/src/type/matrix_type.cc
similarity index 86%
rename from src/ast/type/matrix_type.cc
rename to src/type/matrix_type.cc
index 12eea45..f151654 100644
--- a/src/ast/type/matrix_type.cc
+++ b/src/type/matrix_type.cc
@@ -12,19 +12,18 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/matrix_type.h"
+#include "src/type/matrix_type.h"
 
 #include <assert.h>
 
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/array_type.h"
+#include "src/type/vector_type.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::Matrix);
+TINT_INSTANTIATE_CLASS_ID(tint::type::Matrix);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 Matrix::Matrix(Type* subtype, uint32_t rows, uint32_t columns)
@@ -52,7 +51,7 @@
 
 uint64_t Matrix::BaseAlignment(MemoryLayout mem_layout) const {
   Vector vec(subtype_, rows_);
-  Array arr(&vec, columns_, ArrayDecorationList{});
+  Array arr(&vec, columns_, ast::ArrayDecorationList{});
   return arr.BaseAlignment(mem_layout);
 }
 
@@ -61,5 +60,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/matrix_type.h b/src/type/matrix_type.h
similarity index 92%
rename from src/ast/type/matrix_type.h
rename to src/type/matrix_type.h
index 500f43e..d37a115 100644
--- a/src/ast/type/matrix_type.h
+++ b/src/type/matrix_type.h
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_MATRIX_TYPE_H_
-#define SRC_AST_TYPE_MATRIX_TYPE_H_
+#ifndef SRC_TYPE_MATRIX_TYPE_H_
+#define SRC_TYPE_MATRIX_TYPE_H_
 
 #include <string>
 
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// A matrix type
@@ -67,7 +66,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_MATRIX_TYPE_H_
+#endif  // SRC_TYPE_MATRIX_TYPE_H_
diff --git a/src/ast/type/matrix_type_test.cc b/src/type/matrix_type_test.cc
similarity index 86%
rename from src/ast/type/matrix_type_test.cc
rename to src/type/matrix_type_test.cc
index fb4c1a7..c1b6c43 100644
--- a/src/ast/type/matrix_type_test.cc
+++ b/src/type/matrix_type_test.cc
@@ -12,22 +12,21 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/matrix_type.h"
+#include "src/type/matrix_type.h"
 
-#include "src/ast/test_helper.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -124,5 +123,4 @@
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/multisampled_texture_type.cc b/src/type/multisampled_texture_type.cc
similarity index 89%
rename from src/ast/type/multisampled_texture_type.cc
rename to src/type/multisampled_texture_type.cc
index 2ec4320..16bb04e 100644
--- a/src/ast/type/multisampled_texture_type.cc
+++ b/src/type/multisampled_texture_type.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/multisampled_texture_type.h"
+#include "src/type/multisampled_texture_type.h"
 
 #include <cassert>
 #include <sstream>
@@ -20,10 +20,9 @@
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::MultisampledTexture);
+TINT_INSTANTIATE_CLASS_ID(tint::type::MultisampledTexture);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 MultisampledTexture::MultisampledTexture(TextureDimension dim, Type* type)
@@ -46,5 +45,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/multisampled_texture_type.h b/src/type/multisampled_texture_type.h
similarity index 86%
rename from src/ast/type/multisampled_texture_type.h
rename to src/type/multisampled_texture_type.h
index 4fb45e2..afe7d6b 100644
--- a/src/ast/type/multisampled_texture_type.h
+++ b/src/type/multisampled_texture_type.h
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_MULTISAMPLED_TEXTURE_TYPE_H_
-#define SRC_AST_TYPE_MULTISAMPLED_TEXTURE_TYPE_H_
+#ifndef SRC_TYPE_MULTISAMPLED_TEXTURE_TYPE_H_
+#define SRC_TYPE_MULTISAMPLED_TEXTURE_TYPE_H_
 
 #include <string>
 
-#include "src/ast/type/texture_type.h"
+#include "src/type/texture_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// A multisampled texture type.
@@ -50,7 +49,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_MULTISAMPLED_TEXTURE_TYPE_H_
+#endif  // SRC_TYPE_MULTISAMPLED_TEXTURE_TYPE_H_
diff --git a/src/ast/type/multisampled_texture_type_test.cc b/src/type/multisampled_texture_type_test.cc
similarity index 78%
rename from src/ast/type/multisampled_texture_type_test.cc
rename to src/type/multisampled_texture_type_test.cc
index 99bb0e5..788d7df 100644
--- a/src/ast/type/multisampled_texture_type_test.cc
+++ b/src/type/multisampled_texture_type_test.cc
@@ -12,25 +12,24 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/multisampled_texture_type.h"
+#include "src/type/multisampled_texture_type.h"
 
-#include "src/ast/test_helper.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -91,5 +90,4 @@
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/pointer_type.cc b/src/type/pointer_type.cc
similarity index 85%
rename from src/ast/type/pointer_type.cc
rename to src/type/pointer_type.cc
index 67c0cfa..5077d33 100644
--- a/src/ast/type/pointer_type.cc
+++ b/src/type/pointer_type.cc
@@ -12,18 +12,17 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/pointer_type.h"
+#include "src/type/pointer_type.h"
 
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::Pointer);
+TINT_INSTANTIATE_CLASS_ID(tint::type::Pointer);
 
 namespace tint {
-namespace ast {
 namespace type {
 
-Pointer::Pointer(Type* subtype, StorageClass storage_class)
+Pointer::Pointer(Type* subtype, ast::StorageClass storage_class)
     : subtype_(subtype), storage_class_(storage_class) {}
 
 std::string Pointer::type_name() const {
@@ -41,5 +40,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/pointer_type.h b/src/type/pointer_type.h
similarity index 80%
rename from src/ast/type/pointer_type.h
rename to src/type/pointer_type.h
index 7a9a61b..bf64785 100644
--- a/src/ast/type/pointer_type.h
+++ b/src/type/pointer_type.h
@@ -12,17 +12,16 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_POINTER_TYPE_H_
-#define SRC_AST_TYPE_POINTER_TYPE_H_
+#ifndef SRC_TYPE_POINTER_TYPE_H_
+#define SRC_TYPE_POINTER_TYPE_H_
 
 #include <sstream>
 #include <string>
 
 #include "src/ast/storage_class.h"
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// A pointer type.
@@ -31,7 +30,7 @@
   /// Construtor
   /// @param subtype the pointee type
   /// @param storage_class the storage class of the pointer
-  explicit Pointer(Type* subtype, StorageClass storage_class);
+  explicit Pointer(Type* subtype, ast::StorageClass storage_class);
   /// Move constructor
   Pointer(Pointer&&);
   ~Pointer() override;
@@ -39,7 +38,7 @@
   /// @returns the pointee type
   Type* type() const { return subtype_; }
   /// @returns the storage class of the pointer
-  StorageClass storage_class() const { return storage_class_; }
+  ast::StorageClass storage_class() const { return storage_class_; }
 
   /// @returns the name for this type
   std::string type_name() const override;
@@ -51,11 +50,10 @@
 
  private:
   Type* const subtype_;
-  StorageClass const storage_class_;
+  ast::StorageClass const storage_class_;
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_POINTER_TYPE_H_
+#endif  // SRC_TYPE_POINTER_TYPE_H_
diff --git a/src/ast/type/pointer_type_test.cc b/src/type/pointer_type_test.cc
similarity index 67%
rename from src/ast/type/pointer_type_test.cc
rename to src/type/pointer_type_test.cc
index 95a4c87..7b6c6a8 100644
--- a/src/ast/type/pointer_type_test.cc
+++ b/src/type/pointer_type_test.cc
@@ -12,22 +12,21 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/pointer_type.h"
+#include "src/type/pointer_type.h"
 
-#include "src/ast/test_helper.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -35,14 +34,14 @@
 
 TEST_F(PointerTest, Creation) {
   I32 i32;
-  Pointer p{&i32, StorageClass::kStorage};
+  Pointer p{&i32, ast::StorageClass::kStorage};
   EXPECT_EQ(p.type(), &i32);
-  EXPECT_EQ(p.storage_class(), StorageClass::kStorage);
+  EXPECT_EQ(p.storage_class(), ast::StorageClass::kStorage);
 }
 
 TEST_F(PointerTest, Is) {
   I32 i32;
-  Pointer p{&i32, StorageClass::kFunction};
+  Pointer p{&i32, ast::StorageClass::kFunction};
   Type* ty = &p;
   EXPECT_FALSE(ty->Is<AccessControl>());
   EXPECT_FALSE(ty->Is<Alias>());
@@ -61,11 +60,10 @@
 
 TEST_F(PointerTest, TypeName) {
   I32 i32;
-  Pointer p{&i32, StorageClass::kWorkgroup};
+  Pointer p{&i32, ast::StorageClass::kWorkgroup};
   EXPECT_EQ(p.type_name(), "__ptr_workgroup__i32");
 }
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/sampled_texture_type.cc b/src/type/sampled_texture_type.cc
similarity index 89%
rename from src/ast/type/sampled_texture_type.cc
rename to src/type/sampled_texture_type.cc
index 9a95c12..3d5d00a 100644
--- a/src/ast/type/sampled_texture_type.cc
+++ b/src/type/sampled_texture_type.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/sampled_texture_type.h"
+#include "src/type/sampled_texture_type.h"
 
 #include <cassert>
 #include <sstream>
@@ -20,10 +20,9 @@
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::SampledTexture);
+TINT_INSTANTIATE_CLASS_ID(tint::type::SampledTexture);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 SampledTexture::SampledTexture(TextureDimension dim, Type* type)
@@ -46,5 +45,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/sampled_texture_type.h b/src/type/sampled_texture_type.h
similarity index 87%
rename from src/ast/type/sampled_texture_type.h
rename to src/type/sampled_texture_type.h
index cdc93fa..3211050 100644
--- a/src/ast/type/sampled_texture_type.h
+++ b/src/type/sampled_texture_type.h
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_SAMPLED_TEXTURE_TYPE_H_
-#define SRC_AST_TYPE_SAMPLED_TEXTURE_TYPE_H_
+#ifndef SRC_TYPE_SAMPLED_TEXTURE_TYPE_H_
+#define SRC_TYPE_SAMPLED_TEXTURE_TYPE_H_
 
 #include <string>
 
-#include "src/ast/type/texture_type.h"
+#include "src/type/texture_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// A sampled texture type.
@@ -50,7 +49,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_SAMPLED_TEXTURE_TYPE_H_
+#endif  // SRC_TYPE_SAMPLED_TEXTURE_TYPE_H_
diff --git a/src/ast/type/sampled_texture_type_test.cc b/src/type/sampled_texture_type_test.cc
similarity index 78%
rename from src/ast/type/sampled_texture_type_test.cc
rename to src/type/sampled_texture_type_test.cc
index 5c6bcb4..a80312f 100644
--- a/src/ast/type/sampled_texture_type_test.cc
+++ b/src/type/sampled_texture_type_test.cc
@@ -12,24 +12,23 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/sampled_texture_type.h"
+#include "src/type/sampled_texture_type.h"
 
-#include "src/ast/test_helper.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -89,5 +88,4 @@
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/sampler_type.cc b/src/type/sampler_type.cc
similarity index 91%
rename from src/ast/type/sampler_type.cc
rename to src/type/sampler_type.cc
index f1070d4..d4b0ae7 100644
--- a/src/ast/type/sampler_type.cc
+++ b/src/type/sampler_type.cc
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/sampler_type.h"
+#include "src/type/sampler_type.h"
 
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::Sampler);
+TINT_INSTANTIATE_CLASS_ID(tint::type::Sampler);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 std::ostream& operator<<(std::ostream& out, SamplerKind kind) {
@@ -51,5 +50,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/sampler_type.h b/src/type/sampler_type.h
similarity index 90%
rename from src/ast/type/sampler_type.h
rename to src/type/sampler_type.h
index 28a60e8..8c71128 100644
--- a/src/ast/type/sampler_type.h
+++ b/src/type/sampler_type.h
@@ -12,16 +12,15 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_SAMPLER_TYPE_H_
-#define SRC_AST_TYPE_SAMPLER_TYPE_H_
+#ifndef SRC_TYPE_SAMPLER_TYPE_H_
+#define SRC_TYPE_SAMPLER_TYPE_H_
 
 #include <ostream>
 #include <string>
 
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// The different kinds of samplers
@@ -62,7 +61,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_SAMPLER_TYPE_H_
+#endif  // SRC_TYPE_SAMPLER_TYPE_H_
diff --git a/src/ast/type/sampler_type_test.cc b/src/type/sampler_type_test.cc
similarity index 79%
rename from src/ast/type/sampler_type_test.cc
rename to src/type/sampler_type_test.cc
index 9641aec..2648300 100644
--- a/src/ast/type/sampler_type_test.cc
+++ b/src/type/sampler_type_test.cc
@@ -12,23 +12,22 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/sampler_type.h"
+#include "src/type/sampler_type.h"
 
-#include "src/ast/test_helper.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -80,5 +79,4 @@
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/storage_texture_type.cc b/src/type/storage_texture_type.cc
similarity index 96%
rename from src/ast/type/storage_texture_type.cc
rename to src/type/storage_texture_type.cc
index 3dc432c..1f175fd 100644
--- a/src/ast/type/storage_texture_type.cc
+++ b/src/type/storage_texture_type.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/storage_texture_type.h"
+#include "src/type/storage_texture_type.h"
 
 #include <cassert>
 #include <sstream>
@@ -20,10 +20,9 @@
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::StorageTexture);
+TINT_INSTANTIATE_CLASS_ID(tint::type::StorageTexture);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 // Note, these names match the names in the WGSL spec. This behaviour is used
@@ -168,5 +167,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/storage_texture_type.h b/src/type/storage_texture_type.h
similarity index 88%
rename from src/ast/type/storage_texture_type.h
rename to src/type/storage_texture_type.h
index 2723a0f..51b147e 100644
--- a/src/ast/type/storage_texture_type.h
+++ b/src/type/storage_texture_type.h
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_STORAGE_TEXTURE_TYPE_H_
-#define SRC_AST_TYPE_STORAGE_TEXTURE_TYPE_H_
+#ifndef SRC_TYPE_STORAGE_TEXTURE_TYPE_H_
+#define SRC_TYPE_STORAGE_TEXTURE_TYPE_H_
 
 #include <string>
 
-#include "src/ast/type/texture_type.h"
+#include "src/type/texture_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// The image format in the storage texture
@@ -70,8 +69,7 @@
   /// Constructor
   /// @param dim the dimensionality of the texture
   /// @param format the image format of the texture
-  StorageTexture(TextureDimension dim,
-                 ImageFormat format);
+  StorageTexture(TextureDimension dim, ImageFormat format);
 
   /// Move constructor
   StorageTexture(StorageTexture&&);
@@ -101,7 +99,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_STORAGE_TEXTURE_TYPE_H_
+#endif  // SRC_TYPE_STORAGE_TEXTURE_TYPE_H_
diff --git a/src/ast/type/storage_texture_type_test.cc b/src/type/storage_texture_type_test.cc
similarity index 85%
rename from src/ast/type/storage_texture_type_test.cc
rename to src/type/storage_texture_type_test.cc
index d05d53d..7b327da 100644
--- a/src/ast/type/storage_texture_type_test.cc
+++ b/src/type/storage_texture_type_test.cc
@@ -12,28 +12,27 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/storage_texture_type.h"
+#include "src/type/storage_texture_type.h"
 
 #include <memory>
 
 #include "src/ast/identifier_expression.h"
-#include "src/ast/test_helper.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 #include "src/type_determiner.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -120,5 +119,4 @@
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/struct_type.cc b/src/type/struct_type.cc
similarity index 89%
rename from src/ast/type/struct_type.cc
rename to src/type/struct_type.cc
index 24f5640..39d65db 100644
--- a/src/ast/type/struct_type.cc
+++ b/src/type/struct_type.cc
@@ -12,22 +12,21 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/struct_type.h"
+#include "src/type/struct_type.h"
 
 #include <cmath>
 #include <utility>
 
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/vector_type.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::Struct);
+TINT_INSTANTIATE_CLASS_ID(tint::type::Struct);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 Struct::Struct(const Symbol& sym, ast::Struct* impl)
@@ -88,5 +87,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/struct_type.h b/src/type/struct_type.h
similarity index 92%
rename from src/ast/type/struct_type.h
rename to src/type/struct_type.h
index e340f4bb..63fcaa2 100644
--- a/src/ast/type/struct_type.h
+++ b/src/type/struct_type.h
@@ -12,18 +12,17 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_STRUCT_TYPE_H_
-#define SRC_AST_TYPE_STRUCT_TYPE_H_
+#ifndef SRC_TYPE_STRUCT_TYPE_H_
+#define SRC_TYPE_STRUCT_TYPE_H_
 
 #include <memory>
 #include <string>
 
 #include "src/ast/struct.h"
-#include "src/ast/type/type.h"
 #include "src/symbol.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// A structure type
@@ -72,7 +71,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_STRUCT_TYPE_H_
+#endif  // SRC_TYPE_STRUCT_TYPE_H_
diff --git a/src/type/struct_type_test.cc b/src/type/struct_type_test.cc
new file mode 100644
index 0000000..2ed78a1
--- /dev/null
+++ b/src/type/struct_type_test.cc
@@ -0,0 +1,216 @@
+// 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/type/struct_type.h"
+
+#include <utility>
+
+#include "src/ast/stride_decoration.h"
+#include "src/ast/struct_member.h"
+#include "src/ast/struct_member_decoration.h"
+#include "src/ast/struct_member_offset_decoration.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+
+namespace tint {
+namespace type {
+namespace {
+
+using StructTypeTest = TestHelper;
+
+TEST_F(StructTypeTest, Creation) {
+  auto* impl =
+      create<ast::Struct>(ast::StructMemberList{}, ast::StructDecorationList{});
+  auto* ptr = impl;
+  auto* s = ty.struct_("S", impl);
+  EXPECT_EQ(s->impl(), ptr);
+}
+
+TEST_F(StructTypeTest, Is) {
+  auto* impl =
+      create<ast::Struct>(ast::StructMemberList{}, ast::StructDecorationList{});
+  auto* s = ty.struct_("S", impl);
+  type::Type* ty = s;
+  EXPECT_FALSE(ty->Is<AccessControl>());
+  EXPECT_FALSE(ty->Is<Alias>());
+  EXPECT_FALSE(ty->Is<Array>());
+  EXPECT_FALSE(ty->Is<Bool>());
+  EXPECT_FALSE(ty->Is<F32>());
+  EXPECT_FALSE(ty->Is<I32>());
+  EXPECT_FALSE(ty->Is<Matrix>());
+  EXPECT_FALSE(ty->Is<Pointer>());
+  EXPECT_FALSE(ty->Is<Sampler>());
+  EXPECT_TRUE(ty->Is<Struct>());
+  EXPECT_FALSE(ty->Is<Texture>());
+  EXPECT_FALSE(ty->Is<U32>());
+  EXPECT_FALSE(ty->Is<Vector>());
+}
+
+TEST_F(StructTypeTest, TypeName) {
+  auto* impl =
+      create<ast::Struct>(ast::StructMemberList{}, ast::StructDecorationList{});
+  auto* s = ty.struct_("my_struct", impl);
+  EXPECT_EQ(s->type_name(), "__struct_tint_symbol_1");
+}
+
+TEST_F(StructTypeTest, MinBufferBindingSize) {
+  auto* str = create<ast::Struct>(
+      ast::StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
+                            Member("bar", ty.u32, {MemberOffset(4)})},
+      ast::StructDecorationList{});
+  auto* s_ty = ty.struct_("s_ty", str);
+
+  EXPECT_EQ(16u, s_ty->MinBufferBindingSize(MemoryLayout::kUniformBuffer));
+  EXPECT_EQ(8u, s_ty->MinBufferBindingSize(MemoryLayout::kStorageBuffer));
+}
+
+TEST_F(StructTypeTest, MinBufferBindingSizeArray) {
+  Array arr(ty.u32, 4,
+            ast::ArrayDecorationList{create<ast::StrideDecoration>(4)});
+
+  auto* str = create<ast::Struct>(
+      ast::StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
+                            Member("bar", ty.u32, {MemberOffset(4)}),
+                            Member("bar", &arr, {MemberOffset(8)})},
+      ast::StructDecorationList{});
+  auto* s_ty = ty.struct_("s_ty", str);
+
+  EXPECT_EQ(32u, s_ty->MinBufferBindingSize(MemoryLayout::kUniformBuffer));
+  EXPECT_EQ(24u, s_ty->MinBufferBindingSize(MemoryLayout::kStorageBuffer));
+}
+
+TEST_F(StructTypeTest, MinBufferBindingSizeRuntimeArray) {
+  Array arr(ty.u32, 0,
+            ast::ArrayDecorationList{create<ast::StrideDecoration>(4)});
+
+  auto* str = create<ast::Struct>(
+      ast::StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
+                            Member("bar", ty.u32, {MemberOffset(4)}),
+                            Member("bar", ty.u32, {MemberOffset(8)})},
+      ast::StructDecorationList{});
+  auto* s_ty = ty.struct_("s_ty", str);
+
+  EXPECT_EQ(12u, s_ty->MinBufferBindingSize(MemoryLayout::kStorageBuffer));
+}
+
+TEST_F(StructTypeTest, MinBufferBindingSizeVec2) {
+  auto* str = create<ast::Struct>(
+      ast::StructMemberList{Member("foo", ty.vec2<u32>(), {MemberOffset(0)})},
+      ast::StructDecorationList{});
+  auto* s_ty = ty.struct_("s_ty", str);
+
+  EXPECT_EQ(16u, s_ty->MinBufferBindingSize(MemoryLayout::kUniformBuffer));
+  EXPECT_EQ(8u, s_ty->MinBufferBindingSize(MemoryLayout::kStorageBuffer));
+}
+
+TEST_F(StructTypeTest, MinBufferBindingSizeVec3) {
+  auto* str = create<ast::Struct>(
+      ast::StructMemberList{Member("foo", ty.vec3<u32>(), {MemberOffset(0)})},
+      ast::StructDecorationList{});
+  auto* s_ty = ty.struct_("s_ty", str);
+
+  EXPECT_EQ(16u, s_ty->MinBufferBindingSize(MemoryLayout::kUniformBuffer));
+  EXPECT_EQ(16u, s_ty->MinBufferBindingSize(MemoryLayout::kStorageBuffer));
+}
+
+TEST_F(StructTypeTest, MinBufferBindingSizeVec4) {
+  auto* str = create<ast::Struct>(
+      ast::StructMemberList{Member("foo", ty.vec4<u32>(), {MemberOffset(0)})},
+      ast::StructDecorationList{});
+  auto* s_ty = ty.struct_("s_ty", str);
+
+  EXPECT_EQ(16u, s_ty->MinBufferBindingSize(MemoryLayout::kUniformBuffer));
+  EXPECT_EQ(16u, s_ty->MinBufferBindingSize(MemoryLayout::kStorageBuffer));
+}
+
+TEST_F(StructTypeTest, BaseAlignment) {
+  auto* str = create<ast::Struct>(
+      ast::StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
+                            Member("bar", ty.u32, {MemberOffset(8)})},
+      ast::StructDecorationList{});
+  auto* s_ty = ty.struct_("s_ty", str);
+
+  EXPECT_EQ(16u, s_ty->BaseAlignment(MemoryLayout::kUniformBuffer));
+  EXPECT_EQ(4u, s_ty->BaseAlignment(MemoryLayout::kStorageBuffer));
+}
+
+TEST_F(StructTypeTest, BaseAlignmentArray) {
+  Array arr(ty.u32, 4,
+            ast::ArrayDecorationList{create<ast::StrideDecoration>(4)});
+  auto* str = create<ast::Struct>(
+      ast::StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
+                            Member("bar", ty.u32, {MemberOffset(4)}),
+                            Member("bar", &arr, {MemberOffset(8)})},
+      ast::StructDecorationList{});
+  auto* s_ty = ty.struct_("s_ty", str);
+
+  EXPECT_EQ(16u, s_ty->BaseAlignment(MemoryLayout::kUniformBuffer));
+  EXPECT_EQ(4u, s_ty->BaseAlignment(MemoryLayout::kStorageBuffer));
+}
+
+TEST_F(StructTypeTest, BaseAlignmentRuntimeArray) {
+  Array arr(ty.u32, 0,
+            ast::ArrayDecorationList{create<ast::StrideDecoration>(4)});
+  auto* str = create<ast::Struct>(
+      ast::StructMemberList{Member("foo", ty.u32, {MemberOffset(0)}),
+                            Member("bar", ty.u32, {MemberOffset(4)}),
+                            Member("bar", ty.u32, {MemberOffset(8)})},
+      ast::StructDecorationList{});
+  auto* s_ty = ty.struct_("s_ty", str);
+
+  EXPECT_EQ(4u, s_ty->BaseAlignment(MemoryLayout::kStorageBuffer));
+}
+
+TEST_F(StructTypeTest, BaseAlignmentVec2) {
+  auto* str = create<ast::Struct>(
+      ast::StructMemberList{Member("foo", ty.vec2<u32>(), {MemberOffset(0)})},
+      ast::StructDecorationList{});
+  auto* s_ty = ty.struct_("s_ty", str);
+
+  EXPECT_EQ(16u, s_ty->BaseAlignment(MemoryLayout::kUniformBuffer));
+  EXPECT_EQ(8u, s_ty->BaseAlignment(MemoryLayout::kStorageBuffer));
+}
+
+TEST_F(StructTypeTest, BaseAlignmentVec3) {
+  auto* str = create<ast::Struct>(
+      ast::StructMemberList{Member("foo", ty.vec3<u32>(), {MemberOffset(0)})},
+      ast::StructDecorationList{});
+  auto* s_ty = ty.struct_("s_ty", str);
+
+  EXPECT_EQ(16u, s_ty->BaseAlignment(MemoryLayout::kUniformBuffer));
+  EXPECT_EQ(16u, s_ty->BaseAlignment(MemoryLayout::kStorageBuffer));
+}
+
+TEST_F(StructTypeTest, BaseAlignmentVec4) {
+  auto* str = create<ast::Struct>(
+      ast::StructMemberList{Member("foo", ty.vec4<u32>(), {MemberOffset(0)})},
+      ast::StructDecorationList{});
+  auto* s_ty = ty.struct_("s_ty", str);
+
+  EXPECT_EQ(16u, s_ty->BaseAlignment(MemoryLayout::kUniformBuffer));
+  EXPECT_EQ(16u, s_ty->BaseAlignment(MemoryLayout::kStorageBuffer));
+}
+
+}  // namespace
+}  // namespace type
+}  // namespace tint
diff --git a/src/type/test_helper.h b/src/type/test_helper.h
new file mode 100644
index 0000000..e161d04
--- /dev/null
+++ b/src/type/test_helper.h
@@ -0,0 +1,52 @@
+// 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_TYPE_TEST_HELPER_H_
+#define SRC_TYPE_TEST_HELPER_H_
+
+#include <memory>
+#include <string>
+#include <utility>
+
+#include "gtest/gtest.h"
+#include "src/ast/builder.h"
+#include "src/ast/module.h"
+#include "src/demangler.h"
+
+namespace tint {
+namespace type {
+
+/// Helper class for testing
+template <typename BASE>
+class TestHelperBase : public BASE, public ast::BuilderWithModule {
+ public:
+  /// Demangles the given string
+  /// @param s the string to demangle
+  /// @returns the demangled string
+  std::string demangle(const std::string& s) {
+    return demanger.Demangle(*mod, s);
+  }
+
+  /// A demangler
+  Demangler demanger;
+};
+using TestHelper = TestHelperBase<testing::Test>;
+
+template <typename T>
+using TestParamHelper = TestHelperBase<testing::TestWithParam<T>>;
+
+}  // namespace type
+}  // namespace tint
+
+#endif  // SRC_TYPE_TEST_HELPER_H_
diff --git a/src/ast/type/texture_type.cc b/src/type/texture_type.cc
similarity index 90%
rename from src/ast/type/texture_type.cc
rename to src/type/texture_type.cc
index 58a0d47..c55c599 100644
--- a/src/ast/type/texture_type.cc
+++ b/src/type/texture_type.cc
@@ -12,18 +12,17 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/texture_type.h"
+#include "src/type/texture_type.h"
 
 #include <cassert>
 #include <ostream>
 
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/sampled_texture_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/sampled_texture_type.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::Texture);
+TINT_INSTANTIATE_CLASS_ID(tint::type::Texture);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 std::ostream& operator<<(std::ostream& out, TextureDimension dim) {
@@ -97,5 +96,4 @@
 Texture::~Texture() = default;
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/texture_type.h b/src/type/texture_type.h
similarity index 91%
rename from src/ast/type/texture_type.h
rename to src/type/texture_type.h
index 495afd9..32ea8a0 100644
--- a/src/ast/type/texture_type.h
+++ b/src/type/texture_type.h
@@ -12,13 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_TEXTURE_TYPE_H_
-#define SRC_AST_TYPE_TEXTURE_TYPE_H_
+#ifndef SRC_TYPE_TEXTURE_TYPE_H_
+#define SRC_TYPE_TEXTURE_TYPE_H_
 
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// The dimensionality of the texture
@@ -73,7 +72,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_TEXTURE_TYPE_H_
+#endif  // SRC_TYPE_TEXTURE_TYPE_H_
diff --git a/src/ast/type/texture_type_test.cc b/src/type/texture_type_test.cc
similarity index 94%
rename from src/ast/type/texture_type_test.cc
rename to src/type/texture_type_test.cc
index 3ed1921..33a2c43 100644
--- a/src/ast/type/texture_type_test.cc
+++ b/src/type/texture_type_test.cc
@@ -12,12 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/texture_type.h"
+#include "src/type/texture_type.h"
 
-#include "src/ast/test_helper.h"
+#include "src/type/test_helper.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -47,5 +46,4 @@
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/type.cc b/src/type/type.cc
similarity index 79%
rename from src/ast/type/type.cc
rename to src/type/type.cc
index 329812f..623d076 100644
--- a/src/ast/type/type.cc
+++ b/src/type/type.cc
@@ -12,29 +12,28 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 #include <assert.h>
 
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::Type);
+TINT_INSTANTIATE_CLASS_ID(tint::type::Type);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 Type::Type() = default;
@@ -121,5 +120,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/type.h b/src/type/type.h
similarity index 94%
rename from src/ast/type/type.h
rename to src/type/type.h
index 536ddd1..adbd9a1 100644
--- a/src/ast/type/type.h
+++ b/src/type/type.h
@@ -12,21 +12,24 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_TYPE_H_
-#define SRC_AST_TYPE_TYPE_H_
+#ifndef SRC_TYPE_TYPE_H_
+#define SRC_TYPE_TYPE_H_
 
 #include <string>
 
 #include "src/castable.h"
 
 namespace tint {
-namespace ast {
 
+namespace ast {
 class Module;
 class CloneContext;
+}  // namespace ast
 
 namespace type {
 
+using CloneContext = ast::CloneContext;  // TEMP
+
 /// Supported memory layouts for calculating sizes
 enum class MemoryLayout { kUniformBuffer, kStorageBuffer };
 
@@ -40,7 +43,7 @@
   /// Clones this type and all transitive types using the `CloneContext` `ctx`.
   /// @param ctx the clone context
   /// @return the newly cloned type
-  virtual Type* Clone(CloneContext* ctx) const = 0;
+  virtual Type* Clone(ast::CloneContext* ctx) const = 0;
 
   /// @returns the name for this type. The type name is unique over all types.
   virtual std::string type_name() const = 0;
@@ -105,13 +108,12 @@
   /// @param t the `Type` to clone (if not null)
   /// @return the cloned type
   template <typename T>
-  static T* Clone(Module* m, const T* t) {
+  static T* Clone(ast::Module* m, const T* t) {
     return (t != nullptr) ? static_cast<T*>(t->Clone(m)) : nullptr;
   }
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_TYPE_H_
+#endif  // SRC_TYPE_TYPE_H_
diff --git a/src/ast/type_manager.cc b/src/type/type_manager.cc
similarity index 70%
rename from src/ast/type_manager.cc
rename to src/type/type_manager.cc
index 39f4e07..235819f 100644
--- a/src/ast/type_manager.cc
+++ b/src/type/type_manager.cc
@@ -12,23 +12,23 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type_manager.h"
+#include "src/type/type_manager.h"
 
 #include <utility>
 
 namespace tint {
-namespace ast {
+namespace type {
 
-TypeManager::TypeManager() = default;
-TypeManager::TypeManager(TypeManager&&) = default;
-TypeManager& TypeManager::operator=(TypeManager&& rhs) = default;
-TypeManager::~TypeManager() = default;
+Manager::Manager() = default;
+Manager::Manager(Manager&&) = default;
+Manager& Manager::operator=(Manager&& rhs) = default;
+Manager::~Manager() = default;
 
-void TypeManager::Reset() {
+void Manager::Reset() {
   types_.clear();
 }
 
-type::Type* TypeManager::Get(std::unique_ptr<type::Type> type) {
+type::Type* Manager::Get(std::unique_ptr<type::Type> type) {
   auto name = type->type_name();
 
   if (types_.find(name) == types_.end()) {
@@ -37,5 +37,5 @@
   return types_.find(name)->second.get();
 }
 
-}  // namespace ast
+}  // namespace type
 }  // namespace tint
diff --git a/src/ast/type_manager.h b/src/type/type_manager.h
similarity index 82%
rename from src/ast/type_manager.h
rename to src/type/type_manager.h
index f428ac9..5e28355 100644
--- a/src/ast/type_manager.h
+++ b/src/type/type_manager.h
@@ -12,35 +12,35 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_MANAGER_H_
-#define SRC_AST_TYPE_MANAGER_H_
+#ifndef SRC_TYPE_TYPE_MANAGER_H_
+#define SRC_TYPE_TYPE_MANAGER_H_
 
 #include <memory>
 #include <string>
 #include <unordered_map>
 #include <utility>
 
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
+namespace type {
 
 /// The type manager holds all the pointers to the known types.
-class TypeManager {
+class Manager {
  public:
   /// Constructor
-  TypeManager();
+  Manager();
 
   /// Move constructor
-  TypeManager(TypeManager&&);
+  Manager(Manager&&);
 
   /// Move assignment operator
-  /// @param rhs the TypeManager to move
-  /// @return this TypeManager
-  TypeManager& operator=(TypeManager&& rhs);
+  /// @param rhs the Manager to move
+  /// @return this Manager
+  Manager& operator=(Manager&& rhs);
 
   /// Destructor
-  ~TypeManager();
+  ~Manager();
 
   /// Clears all registered types.
   void Reset();
@@ -69,7 +69,7 @@
   std::unordered_map<std::string, std::unique_ptr<type::Type>> types_;
 };
 
-}  // namespace ast
+}  // namespace type
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_MANAGER_H_
+#endif  // SRC_TYPE_TYPE_MANAGER_H_
diff --git a/src/ast/type_manager_test.cc b/src/type/type_manager_test.cc
similarity index 62%
rename from src/ast/type_manager_test.cc
rename to src/type/type_manager_test.cc
index f78a61f..d8cf495 100644
--- a/src/ast/type_manager_test.cc
+++ b/src/type/type_manager_test.cc
@@ -12,61 +12,60 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type_manager.h"
+#include "src/type/type_manager.h"
 
 #include "gtest/gtest.h"
-#include "src/ast/test_helper.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/u32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/u32_type.h"
 
 namespace tint {
-namespace ast {
+namespace type {
 namespace {
 
 using TypeManagerTest = testing::Test;
 
 TEST_F(TypeManagerTest, GetUnregistered) {
-  TypeManager tm;
-  auto* t = tm.Get(std::make_unique<type::I32>());
+  Manager tm;
+  auto* t = tm.Get(std::make_unique<I32>());
   ASSERT_NE(t, nullptr);
-  EXPECT_TRUE(t->Is<type::I32>());
+  EXPECT_TRUE(t->Is<I32>());
 }
 
 TEST_F(TypeManagerTest, GetSameTypeReturnsSamePtr) {
-  TypeManager tm;
-  auto* t = tm.Get(std::make_unique<type::I32>());
+  Manager tm;
+  auto* t = tm.Get(std::make_unique<I32>());
   ASSERT_NE(t, nullptr);
-  EXPECT_TRUE(t->Is<type::I32>());
+  EXPECT_TRUE(t->Is<I32>());
 
-  auto* t2 = tm.Get(std::make_unique<type::I32>());
+  auto* t2 = tm.Get(std::make_unique<I32>());
   EXPECT_EQ(t, t2);
 }
 
 TEST_F(TypeManagerTest, GetDifferentTypeReturnsDifferentPtr) {
-  TypeManager tm;
-  auto* t = tm.Get(std::make_unique<type::I32>());
+  Manager tm;
+  auto* t = tm.Get(std::make_unique<I32>());
   ASSERT_NE(t, nullptr);
-  EXPECT_TRUE(t->Is<type::I32>());
+  EXPECT_TRUE(t->Is<I32>());
 
-  auto* t2 = tm.Get(std::make_unique<type::U32>());
+  auto* t2 = tm.Get(std::make_unique<U32>());
   ASSERT_NE(t2, nullptr);
   EXPECT_NE(t, t2);
-  EXPECT_TRUE(t2->Is<type::U32>());
+  EXPECT_TRUE(t2->Is<U32>());
 }
 
 TEST_F(TypeManagerTest, ResetClearsPreviousData) {
-  TypeManager tm;
-  auto* t = tm.Get(std::make_unique<type::I32>());
+  Manager tm;
+  auto* t = tm.Get(std::make_unique<I32>());
   ASSERT_NE(t, nullptr);
 
   EXPECT_FALSE(tm.types().empty());
   tm.Reset();
   EXPECT_TRUE(tm.types().empty());
 
-  auto* t2 = tm.Get(std::make_unique<type::I32>());
+  auto* t2 = tm.Get(std::make_unique<I32>());
   ASSERT_NE(t2, nullptr);
 }
 
 }  // namespace
-}  // namespace ast
+}  // namespace type
 }  // namespace tint
diff --git a/src/ast/type/u32_type.cc b/src/type/u32_type.cc
similarity index 89%
rename from src/ast/type/u32_type.cc
rename to src/type/u32_type.cc
index 37364d7..fd87b36 100644
--- a/src/ast/type/u32_type.cc
+++ b/src/type/u32_type.cc
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/u32_type.h"
+#include "src/type/u32_type.h"
 
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::U32);
+TINT_INSTANTIATE_CLASS_ID(tint::type::U32);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 U32::U32() = default;
@@ -46,5 +45,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/u32_type.h b/src/type/u32_type.h
similarity index 90%
rename from src/ast/type/u32_type.h
rename to src/type/u32_type.h
index 9e04155..77d1eda 100644
--- a/src/ast/type/u32_type.h
+++ b/src/type/u32_type.h
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_U32_TYPE_H_
-#define SRC_AST_TYPE_U32_TYPE_H_
+#ifndef SRC_TYPE_U32_TYPE_H_
+#define SRC_TYPE_U32_TYPE_H_
 
 #include <string>
 
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// A unsigned int 32 type.
@@ -52,7 +51,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_U32_TYPE_H_
+#endif  // SRC_TYPE_U32_TYPE_H_
diff --git a/src/ast/type/u32_type_test.cc b/src/type/u32_type_test.cc
similarity index 74%
rename from src/ast/type/u32_type_test.cc
rename to src/type/u32_type_test.cc
index bf3a56b..e0390ce 100644
--- a/src/ast/type/u32_type_test.cc
+++ b/src/type/u32_type_test.cc
@@ -12,23 +12,22 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/u32_type.h"
+#include "src/type/u32_type.h"
 
-#include "src/ast/test_helper.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/texture_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -69,5 +68,4 @@
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/vector_type.cc b/src/type/vector_type.cc
similarity index 92%
rename from src/ast/type/vector_type.cc
rename to src/type/vector_type.cc
index 3697e4e..b56273b 100644
--- a/src/ast/type/vector_type.cc
+++ b/src/type/vector_type.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/vector_type.h"
+#include "src/type/vector_type.h"
 
 #include <assert.h>
 #include <cmath>
@@ -20,10 +20,9 @@
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::Vector);
+TINT_INSTANTIATE_CLASS_ID(tint::type::Vector);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 Vector::Vector(Type* subtype, uint32_t size) : subtype_(subtype), size_(size) {
@@ -58,5 +57,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/vector_type.h b/src/type/vector_type.h
similarity index 91%
rename from src/ast/type/vector_type.h
rename to src/type/vector_type.h
index 4228c59..e9f1af5 100644
--- a/src/ast/type/vector_type.h
+++ b/src/type/vector_type.h
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_VECTOR_TYPE_H_
-#define SRC_AST_TYPE_VECTOR_TYPE_H_
+#ifndef SRC_TYPE_VECTOR_TYPE_H_
+#define SRC_TYPE_VECTOR_TYPE_H_
 
 #include <string>
 
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// A vector type.
@@ -63,7 +62,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_VECTOR_TYPE_H_
+#endif  // SRC_TYPE_VECTOR_TYPE_H_
diff --git a/src/ast/type/vector_type_test.cc b/src/type/vector_type_test.cc
similarity index 82%
rename from src/ast/type/vector_type_test.cc
rename to src/type/vector_type_test.cc
index 9b885ae..20656d7 100644
--- a/src/ast/type/vector_type_test.cc
+++ b/src/type/vector_type_test.cc
@@ -12,22 +12,21 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/vector_type.h"
+#include "src/type/vector_type.h"
 
-#include "src/ast/test_helper.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/test_helper.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 namespace {
 
@@ -103,5 +102,4 @@
 
 }  // namespace
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/void_type.cc b/src/type/void_type.cc
similarity index 88%
rename from src/ast/type/void_type.cc
rename to src/type/void_type.cc
index 62ce402..aa894a5 100644
--- a/src/ast/type/void_type.cc
+++ b/src/type/void_type.cc
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type/void_type.h"
+#include "src/type/void_type.h"
 
 #include "src/ast/clone_context.h"
 #include "src/ast/module.h"
 
-TINT_INSTANTIATE_CLASS_ID(tint::ast::type::Void);
+TINT_INSTANTIATE_CLASS_ID(tint::type::Void);
 
 namespace tint {
-namespace ast {
 namespace type {
 
 Void::Void() = default;
@@ -38,5 +37,4 @@
 }
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
diff --git a/src/ast/type/void_type.h b/src/type/void_type.h
similarity index 86%
rename from src/ast/type/void_type.h
rename to src/type/void_type.h
index 8631188..1207808 100644
--- a/src/ast/type/void_type.h
+++ b/src/type/void_type.h
@@ -12,15 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_TYPE_VOID_TYPE_H_
-#define SRC_AST_TYPE_VOID_TYPE_H_
+#ifndef SRC_TYPE_VOID_TYPE_H_
+#define SRC_TYPE_VOID_TYPE_H_
 
 #include <string>
 
-#include "src/ast/type/type.h"
+#include "src/type/type.h"
 
 namespace tint {
-namespace ast {
 namespace type {
 
 /// A void type
@@ -42,7 +41,6 @@
 };
 
 }  // namespace type
-}  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_TYPE_VOID_TYPE_H_
+#endif  // SRC_TYPE_VOID_TYPE_H_
diff --git a/src/type_determiner.cc b/src/type_determiner.cc
index 7019202..6dcce00 100644
--- a/src/type_determiner.cc
+++ b/src/type_determiner.cc
@@ -38,24 +38,24 @@
 #include "src/ast/return_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 
 namespace tint {
 
@@ -89,10 +89,10 @@
 }
 
 bool TypeDeterminer::Determine() {
-  std::vector<ast::type::StorageTexture*> storage_textures;
+  std::vector<type::StorageTexture*> storage_textures;
   for (auto& it : mod_->types()) {
     if (auto* storage =
-            it.second->UnwrapIfNeeded()->As<ast::type::StorageTexture>()) {
+            it.second->UnwrapIfNeeded()->As<type::StorageTexture>()) {
       storage_textures.emplace_back(storage);
     }
   }
@@ -334,13 +334,13 @@
 
   auto* res = expr->array()->result_type();
   auto* parent_type = res->UnwrapAll();
-  ast::type::Type* ret = nullptr;
-  if (auto* arr = parent_type->As<ast::type::Array>()) {
+  type::Type* ret = nullptr;
+  if (auto* arr = parent_type->As<type::Array>()) {
     ret = arr->type();
-  } else if (auto* vec = parent_type->As<ast::type::Vector>()) {
+  } else if (auto* vec = parent_type->As<type::Vector>()) {
     ret = vec->type();
-  } else if (auto* mat = parent_type->As<ast::type::Matrix>()) {
-    ret = mod_->create<ast::type::Vector>(mat->type(), mat->rows());
+  } else if (auto* mat = parent_type->As<type::Matrix>()) {
+    ret = mod_->create<type::Vector>(mat->type(), mat->rows());
   } else {
     set_error(expr->source(), "invalid parent type (" +
                                   parent_type->type_name() +
@@ -349,14 +349,14 @@
   }
 
   // If we're extracting from a pointer, we return a pointer.
-  if (auto* ptr = res->As<ast::type::Pointer>()) {
-    ret = mod_->create<ast::type::Pointer>(ret, ptr->storage_class());
-  } else if (auto* arr = parent_type->As<ast::type::Array>()) {
+  if (auto* ptr = res->As<type::Pointer>()) {
+    ret = mod_->create<type::Pointer>(ret, ptr->storage_class());
+  } else if (auto* arr = parent_type->As<type::Array>()) {
     if (!arr->type()->is_scalar()) {
       // If we extract a non-scalar from an array then we also get a pointer. We
       // will generate a Function storage class variable to store this
       // into.
-      ret = mod_->create<ast::type::Pointer>(ret, ast::StorageClass::kFunction);
+      ret = mod_->create<type::Pointer>(ret, ast::StorageClass::kFunction);
     }
   }
   expr->set_result_type(ret);
@@ -520,11 +520,11 @@
   }
   if (ident->intrinsic() == ast::Intrinsic::kAny ||
       ident->intrinsic() == ast::Intrinsic::kAll) {
-    expr->func()->set_result_type(mod_->create<ast::type::Bool>());
+    expr->func()->set_result_type(mod_->create<type::Bool>());
     return true;
   }
   if (ident->intrinsic() == ast::Intrinsic::kArrayLength) {
-    expr->func()->set_result_type(mod_->create<ast::type::U32>());
+    expr->func()->set_result_type(mod_->create<type::U32>());
     return true;
   }
   if (ast::intrinsic::IsFloatClassificationIntrinsic(ident->intrinsic())) {
@@ -534,12 +534,12 @@
       return false;
     }
 
-    auto* bool_type = mod_->create<ast::type::Bool>();
+    auto* bool_type = mod_->create<type::Bool>();
 
     auto* param_type = expr->params()[0]->result_type()->UnwrapPtrIfNeeded();
-    if (auto* vec = param_type->As<ast::type::Vector>()) {
+    if (auto* vec = param_type->As<type::Vector>()) {
       expr->func()->set_result_type(
-          mod_->create<ast::type::Vector>(bool_type, vec->size()));
+          mod_->create<type::Vector>(bool_type, vec->size()));
     } else {
       expr->func()->set_result_type(bool_type);
     }
@@ -549,16 +549,16 @@
     ast::intrinsic::TextureSignature::Parameters param;
 
     auto* texture_param = expr->params()[0];
-    if (!texture_param->result_type()->UnwrapAll()->Is<ast::type::Texture>()) {
+    if (!texture_param->result_type()->UnwrapAll()->Is<type::Texture>()) {
       set_error(expr->source(), "invalid first argument for " +
                                     mod_->SymbolToName(ident->symbol()));
       return false;
     }
-    ast::type::Texture* texture =
-        texture_param->result_type()->UnwrapAll()->As<ast::type::Texture>();
+    type::Texture* texture =
+        texture_param->result_type()->UnwrapAll()->As<type::Texture>();
 
-    bool is_array = ast::type::IsTextureArray(texture->dim());
-    bool is_multisampled = texture->Is<ast::type::MultisampledTexture>();
+    bool is_array = type::IsTextureArray(texture->dim());
+    bool is_multisampled = texture->Is<type::MultisampledTexture>();
     switch (ident->intrinsic()) {
       case ast::Intrinsic::kTextureDimensions:
         param.idx.texture = param.count++;
@@ -673,26 +673,26 @@
         std::make_unique<ast::intrinsic::TextureSignature>(param));
 
     // Set the function return type
-    ast::type::Type* return_type = nullptr;
+    type::Type* return_type = nullptr;
     switch (ident->intrinsic()) {
       case ast::Intrinsic::kTextureDimensions: {
-        auto* i32 = mod_->create<ast::type::I32>();
+        auto* i32 = mod_->create<type::I32>();
         switch (texture->dim()) {
           default:
             set_error(expr->source(), "invalid texture dimensions");
             break;
-          case ast::type::TextureDimension::k1d:
-          case ast::type::TextureDimension::k1dArray:
+          case type::TextureDimension::k1d:
+          case type::TextureDimension::k1dArray:
             return_type = i32;
             break;
-          case ast::type::TextureDimension::k2d:
-          case ast::type::TextureDimension::k2dArray:
-            return_type = mod_->create<ast::type::Vector>(i32, 2);
+          case type::TextureDimension::k2d:
+          case type::TextureDimension::k2dArray:
+            return_type = mod_->create<type::Vector>(i32, 2);
             break;
-          case ast::type::TextureDimension::k3d:
-          case ast::type::TextureDimension::kCube:
-          case ast::type::TextureDimension::kCubeArray:
-            return_type = mod_->create<ast::type::Vector>(i32, 3);
+          case type::TextureDimension::k3d:
+          case type::TextureDimension::kCube:
+          case type::TextureDimension::kCubeArray:
+            return_type = mod_->create<type::Vector>(i32, 3);
             break;
         }
         break;
@@ -700,29 +700,29 @@
       case ast::Intrinsic::kTextureNumLayers:
       case ast::Intrinsic::kTextureNumLevels:
       case ast::Intrinsic::kTextureNumSamples:
-        return_type = mod_->create<ast::type::I32>();
+        return_type = mod_->create<type::I32>();
         break;
       case ast::Intrinsic::kTextureStore:
-        return_type = mod_->create<ast::type::Void>();
+        return_type = mod_->create<type::Void>();
         break;
       default: {
-        if (texture->Is<ast::type::DepthTexture>()) {
-          return_type = mod_->create<ast::type::F32>();
+        if (texture->Is<type::DepthTexture>()) {
+          return_type = mod_->create<type::F32>();
         } else {
-          ast::type::Type* type = nullptr;
-          if (auto* storage = texture->As<ast::type::StorageTexture>()) {
+          type::Type* type = nullptr;
+          if (auto* storage = texture->As<type::StorageTexture>()) {
             type = storage->type();
-          } else if (auto* sampled = texture->As<ast::type::SampledTexture>()) {
+          } else if (auto* sampled = texture->As<type::SampledTexture>()) {
             type = sampled->type();
           } else if (auto* msampled =
-                         texture->As<ast::type::MultisampledTexture>()) {
+                         texture->As<type::MultisampledTexture>()) {
             type = msampled->type();
           } else {
             set_error(expr->source(),
                       "unknown texture type for texture sampling");
             return false;
           }
-          return_type = mod_->create<ast::type::Vector>(type, 4);
+          return_type = mod_->create<type::Vector>(type, 4);
         }
       }
     }
@@ -731,7 +731,7 @@
     return true;
   }
   if (ident->intrinsic() == ast::Intrinsic::kDot) {
-    expr->func()->set_result_type(mod_->create<ast::type::F32>());
+    expr->func()->set_result_type(mod_->create<type::F32>());
     return true;
   }
   if (ident->intrinsic() == ast::Intrinsic::kSelect) {
@@ -770,7 +770,7 @@
     return false;
   }
 
-  std::vector<ast::type::Type*> result_types;
+  std::vector<type::Type*> result_types;
   for (uint32_t i = 0; i < data->param_count; ++i) {
     result_types.push_back(
         expr->params()[i]->result_type()->UnwrapPtrIfNeeded());
@@ -813,7 +813,7 @@
           return false;
         }
         if (data->vector_size > 0 &&
-            result_types.back()->As<ast::type::Vector>()->size() !=
+            result_types.back()->As<type::Vector>()->size() !=
                 data->vector_size) {
           set_error(expr->source(), "incorrect vector size for " +
                                         mod_->SymbolToName(ident->symbol()) +
@@ -824,7 +824,7 @@
         }
         break;
       case IntrinsicDataType::kMatrix:
-        if (!result_types.back()->Is<ast::type::Matrix>()) {
+        if (!result_types.back()->Is<type::Matrix>()) {
           set_error(expr->source(), "incorrect type for " +
                                         mod_->SymbolToName(ident->symbol()) +
                                         ". Requires matrix value");
@@ -850,13 +850,12 @@
     expr->func()->set_result_type(
         result_types[0]->is_float_scalar()
             ? result_types[0]
-            : result_types[0]->As<ast::type::Vector>()->type());
+            : result_types[0]->As<type::Vector>()->type());
     return true;
   }
   // The determinant returns the component type of the columns
   if (ident->intrinsic() == ast::Intrinsic::kDeterminant) {
-    expr->func()->set_result_type(
-        result_types[0]->As<ast::type::Matrix>()->type());
+    expr->func()->set_result_type(result_types[0]->As<type::Matrix>()->type());
     return true;
   }
   expr->func()->set_result_type(result_types[0]);
@@ -886,11 +885,11 @@
     // the pointer around the variable type.
     if (var->is_const()) {
       expr->set_result_type(var->type());
-    } else if (var->type()->Is<ast::type::Pointer>()) {
+    } else if (var->type()->Is<type::Pointer>()) {
       expr->set_result_type(var->type());
     } else {
       expr->set_result_type(
-          mod_->create<ast::type::Pointer>(var->type(), var->storage_class()));
+          mod_->create<type::Pointer>(var->type(), var->storage_class()));
     }
 
     set_referenced_from_function_if_needed(var, true);
@@ -1073,8 +1072,8 @@
   auto* res = expr->structure()->result_type();
   auto* data_type = res->UnwrapPtrIfNeeded()->UnwrapIfNeeded();
 
-  ast::type::Type* ret = nullptr;
-  if (auto* ty = data_type->As<ast::type::Struct>()) {
+  type::Type* ret = nullptr;
+  if (auto* ty = data_type->As<type::Struct>()) {
     auto* strct = ty->impl();
     auto symbol = expr->member()->symbol();
 
@@ -1092,10 +1091,10 @@
     }
 
     // If we're extracting from a pointer, we return a pointer.
-    if (auto* ptr = res->As<ast::type::Pointer>()) {
-      ret = mod_->create<ast::type::Pointer>(ret, ptr->storage_class());
+    if (auto* ptr = res->As<type::Pointer>()) {
+      ret = mod_->create<type::Pointer>(ret, ptr->storage_class());
     }
-  } else if (auto* vec = data_type->As<ast::type::Vector>()) {
+  } else if (auto* vec = data_type->As<type::Vector>()) {
     // TODO(dsinclair): Swizzle, record into the identifier experesion
 
     auto size = mod_->SymbolToName(expr->member()->symbol()).size();
@@ -1103,14 +1102,14 @@
       // A single element swizzle is just the type of the vector.
       ret = vec->type();
       // If we're extracting from a pointer, we return a pointer.
-      if (auto* ptr = res->As<ast::type::Pointer>()) {
-        ret = mod_->create<ast::type::Pointer>(ret, ptr->storage_class());
+      if (auto* ptr = res->As<type::Pointer>()) {
+        ret = mod_->create<type::Pointer>(ret, ptr->storage_class());
       }
     } else {
       // The vector will have a number of components equal to the length of the
       // swizzle. This assumes the validator will check that the swizzle
       // is correct.
-      ret = mod_->create<ast::type::Vector>(vec->type(), size);
+      ret = mod_->create<type::Vector>(vec->type(), size);
     }
   } else {
     set_error(
@@ -1141,11 +1140,10 @@
   if (expr->IsLogicalAnd() || expr->IsLogicalOr() || expr->IsEqual() ||
       expr->IsNotEqual() || expr->IsLessThan() || expr->IsGreaterThan() ||
       expr->IsLessThanEqual() || expr->IsGreaterThanEqual()) {
-    auto* bool_type = mod_->create<ast::type::Bool>();
+    auto* bool_type = mod_->create<type::Bool>();
     auto* param_type = expr->lhs()->result_type()->UnwrapPtrIfNeeded();
-    if (auto* vec = param_type->As<ast::type::Vector>()) {
-      expr->set_result_type(
-          mod_->create<ast::type::Vector>(bool_type, vec->size()));
+    if (auto* vec = param_type->As<type::Vector>()) {
+      expr->set_result_type(mod_->create<type::Vector>(bool_type, vec->size()));
     } else {
       expr->set_result_type(bool_type);
     }
@@ -1157,19 +1155,19 @@
 
     // Note, the ordering here matters. The later checks depend on the prior
     // checks having been done.
-    auto* lhs_mat = lhs_type->As<ast::type::Matrix>();
-    auto* rhs_mat = rhs_type->As<ast::type::Matrix>();
-    auto* lhs_vec = lhs_type->As<ast::type::Vector>();
-    auto* rhs_vec = rhs_type->As<ast::type::Vector>();
+    auto* lhs_mat = lhs_type->As<type::Matrix>();
+    auto* rhs_mat = rhs_type->As<type::Matrix>();
+    auto* lhs_vec = lhs_type->As<type::Vector>();
+    auto* rhs_vec = rhs_type->As<type::Vector>();
     if (lhs_mat && rhs_mat) {
-      expr->set_result_type(mod_->create<ast::type::Matrix>(
+      expr->set_result_type(mod_->create<type::Matrix>(
           lhs_mat->type(), lhs_mat->rows(), rhs_mat->columns()));
     } else if (lhs_mat && rhs_vec) {
       expr->set_result_type(
-          mod_->create<ast::type::Vector>(lhs_mat->type(), lhs_mat->rows()));
+          mod_->create<type::Vector>(lhs_mat->type(), lhs_mat->rows()));
     } else if (lhs_vec && rhs_mat) {
       expr->set_result_type(
-          mod_->create<ast::type::Vector>(rhs_mat->type(), rhs_mat->columns()));
+          mod_->create<type::Vector>(rhs_mat->type(), rhs_mat->columns()));
     } else if (lhs_mat) {
       // matrix * scalar
       expr->set_result_type(lhs_type);
@@ -1205,61 +1203,60 @@
   return true;
 }
 
-bool TypeDeterminer::DetermineStorageTextureSubtype(
-    ast::type::StorageTexture* tex) {
+bool TypeDeterminer::DetermineStorageTextureSubtype(type::StorageTexture* tex) {
   if (tex->type() != nullptr) {
     return true;
   }
 
   switch (tex->image_format()) {
-    case ast::type::ImageFormat::kR8Uint:
-    case ast::type::ImageFormat::kR16Uint:
-    case ast::type::ImageFormat::kRg8Uint:
-    case ast::type::ImageFormat::kR32Uint:
-    case ast::type::ImageFormat::kRg16Uint:
-    case ast::type::ImageFormat::kRgba8Uint:
-    case ast::type::ImageFormat::kRg32Uint:
-    case ast::type::ImageFormat::kRgba16Uint:
-    case ast::type::ImageFormat::kRgba32Uint: {
-      tex->set_type(mod_->create<ast::type::U32>());
+    case type::ImageFormat::kR8Uint:
+    case type::ImageFormat::kR16Uint:
+    case type::ImageFormat::kRg8Uint:
+    case type::ImageFormat::kR32Uint:
+    case type::ImageFormat::kRg16Uint:
+    case type::ImageFormat::kRgba8Uint:
+    case type::ImageFormat::kRg32Uint:
+    case type::ImageFormat::kRgba16Uint:
+    case type::ImageFormat::kRgba32Uint: {
+      tex->set_type(mod_->create<type::U32>());
       return true;
     }
 
-    case ast::type::ImageFormat::kR8Sint:
-    case ast::type::ImageFormat::kR16Sint:
-    case ast::type::ImageFormat::kRg8Sint:
-    case ast::type::ImageFormat::kR32Sint:
-    case ast::type::ImageFormat::kRg16Sint:
-    case ast::type::ImageFormat::kRgba8Sint:
-    case ast::type::ImageFormat::kRg32Sint:
-    case ast::type::ImageFormat::kRgba16Sint:
-    case ast::type::ImageFormat::kRgba32Sint: {
-      tex->set_type(mod_->create<ast::type::I32>());
+    case type::ImageFormat::kR8Sint:
+    case type::ImageFormat::kR16Sint:
+    case type::ImageFormat::kRg8Sint:
+    case type::ImageFormat::kR32Sint:
+    case type::ImageFormat::kRg16Sint:
+    case type::ImageFormat::kRgba8Sint:
+    case type::ImageFormat::kRg32Sint:
+    case type::ImageFormat::kRgba16Sint:
+    case type::ImageFormat::kRgba32Sint: {
+      tex->set_type(mod_->create<type::I32>());
       return true;
     }
 
-    case ast::type::ImageFormat::kR8Unorm:
-    case ast::type::ImageFormat::kRg8Unorm:
-    case ast::type::ImageFormat::kRgba8Unorm:
-    case ast::type::ImageFormat::kRgba8UnormSrgb:
-    case ast::type::ImageFormat::kBgra8Unorm:
-    case ast::type::ImageFormat::kBgra8UnormSrgb:
-    case ast::type::ImageFormat::kRgb10A2Unorm:
-    case ast::type::ImageFormat::kR8Snorm:
-    case ast::type::ImageFormat::kRg8Snorm:
-    case ast::type::ImageFormat::kRgba8Snorm:
-    case ast::type::ImageFormat::kR16Float:
-    case ast::type::ImageFormat::kR32Float:
-    case ast::type::ImageFormat::kRg16Float:
-    case ast::type::ImageFormat::kRg11B10Float:
-    case ast::type::ImageFormat::kRg32Float:
-    case ast::type::ImageFormat::kRgba16Float:
-    case ast::type::ImageFormat::kRgba32Float: {
-      tex->set_type(mod_->create<ast::type::F32>());
+    case type::ImageFormat::kR8Unorm:
+    case type::ImageFormat::kRg8Unorm:
+    case type::ImageFormat::kRgba8Unorm:
+    case type::ImageFormat::kRgba8UnormSrgb:
+    case type::ImageFormat::kBgra8Unorm:
+    case type::ImageFormat::kBgra8UnormSrgb:
+    case type::ImageFormat::kRgb10A2Unorm:
+    case type::ImageFormat::kR8Snorm:
+    case type::ImageFormat::kRg8Snorm:
+    case type::ImageFormat::kRgba8Snorm:
+    case type::ImageFormat::kR16Float:
+    case type::ImageFormat::kR32Float:
+    case type::ImageFormat::kRg16Float:
+    case type::ImageFormat::kRg11B10Float:
+    case type::ImageFormat::kRg32Float:
+    case type::ImageFormat::kRgba16Float:
+    case type::ImageFormat::kRgba32Float: {
+      tex->set_type(mod_->create<type::F32>());
       return true;
     }
 
-    case ast::type::ImageFormat::kNone:
+    case type::ImageFormat::kNone:
       break;
   }
 
diff --git a/src/type_determiner.h b/src/type_determiner.h
index 479bbca..f2aa2ba 100644
--- a/src/type_determiner.h
+++ b/src/type_determiner.h
@@ -20,8 +20,8 @@
 #include <vector>
 
 #include "src/ast/module.h"
-#include "src/ast/type/storage_texture_type.h"
 #include "src/scope_stack.h"
+#include "src/type/storage_texture_type.h"
 
 namespace tint {
 namespace ast {
@@ -84,7 +84,7 @@
   /// Determines the result type based off a storage texture format
   /// @param tex the storage texture
   /// @returns false on error
-  bool DetermineStorageTextureSubtype(ast::type::StorageTexture* tex);
+  bool DetermineStorageTextureSubtype(type::StorageTexture* tex);
 
   /// Testing method to set a given variable into the type stack
   /// @param var the variable to set
@@ -99,11 +99,11 @@
   /// @param params the parameters to the method call
   /// @param id out parameter for the external call ID. Must not be a nullptr.
   /// @returns the return type of `name` in `path` or nullptr on error.
-  ast::type::Type* GetImportData(const Source& src,
-                                 const std::string& path,
-                                 const std::string& name,
-                                 const ast::ExpressionList& params,
-                                 uint32_t* id);
+  type::Type* GetImportData(const Source& src,
+                            const std::string& path,
+                            const std::string& name,
+                            const ast::ExpressionList& params,
+                            uint32_t* id);
 
   /// Sets the intrinsic data information for the identifier if needed
   /// @param ident the identifier expression
diff --git a/src/type_determiner_test.cc b/src/type_determiner_test.cc
index 42c9c7a..1436199 100644
--- a/src/type_determiner_test.cc
+++ b/src/type_determiner_test.cc
@@ -47,26 +47,26 @@
 #include "src/ast/struct.h"
 #include "src/ast/struct_member.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
 namespace {
@@ -133,8 +133,8 @@
   ASSERT_NE(lhs->result_type(), nullptr);
   ASSERT_NE(rhs->result_type(), nullptr);
 
-  EXPECT_TRUE(lhs->result_type()->Is<ast::type::I32>());
-  EXPECT_TRUE(rhs->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(lhs->result_type()->Is<type::I32>());
+  EXPECT_TRUE(rhs->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Stmt_Case) {
@@ -151,8 +151,8 @@
   EXPECT_TRUE(td()->DetermineResultType(cse));
   ASSERT_NE(lhs->result_type(), nullptr);
   ASSERT_NE(rhs->result_type(), nullptr);
-  EXPECT_TRUE(lhs->result_type()->Is<ast::type::I32>());
-  EXPECT_TRUE(rhs->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(lhs->result_type()->Is<type::I32>());
+  EXPECT_TRUE(rhs->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Stmt_Block) {
@@ -166,8 +166,8 @@
   EXPECT_TRUE(td()->DetermineResultType(block));
   ASSERT_NE(lhs->result_type(), nullptr);
   ASSERT_NE(rhs->result_type(), nullptr);
-  EXPECT_TRUE(lhs->result_type()->Is<ast::type::I32>());
-  EXPECT_TRUE(rhs->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(lhs->result_type()->Is<type::I32>());
+  EXPECT_TRUE(rhs->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Stmt_Else) {
@@ -183,9 +183,9 @@
   ASSERT_NE(stmt->condition()->result_type(), nullptr);
   ASSERT_NE(lhs->result_type(), nullptr);
   ASSERT_NE(rhs->result_type(), nullptr);
-  EXPECT_TRUE(stmt->condition()->result_type()->Is<ast::type::I32>());
-  EXPECT_TRUE(lhs->result_type()->Is<ast::type::I32>());
-  EXPECT_TRUE(rhs->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(stmt->condition()->result_type()->Is<type::I32>());
+  EXPECT_TRUE(lhs->result_type()->Is<type::I32>());
+  EXPECT_TRUE(rhs->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Stmt_If) {
@@ -213,11 +213,11 @@
   ASSERT_NE(else_rhs->result_type(), nullptr);
   ASSERT_NE(lhs->result_type(), nullptr);
   ASSERT_NE(rhs->result_type(), nullptr);
-  EXPECT_TRUE(stmt->condition()->result_type()->Is<ast::type::I32>());
-  EXPECT_TRUE(else_lhs->result_type()->Is<ast::type::I32>());
-  EXPECT_TRUE(else_rhs->result_type()->Is<ast::type::F32>());
-  EXPECT_TRUE(lhs->result_type()->Is<ast::type::I32>());
-  EXPECT_TRUE(rhs->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(stmt->condition()->result_type()->Is<type::I32>());
+  EXPECT_TRUE(else_lhs->result_type()->Is<type::I32>());
+  EXPECT_TRUE(else_rhs->result_type()->Is<type::F32>());
+  EXPECT_TRUE(lhs->result_type()->Is<type::I32>());
+  EXPECT_TRUE(rhs->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Stmt_Loop) {
@@ -242,10 +242,10 @@
   ASSERT_NE(body_rhs->result_type(), nullptr);
   ASSERT_NE(continuing_lhs->result_type(), nullptr);
   ASSERT_NE(continuing_rhs->result_type(), nullptr);
-  EXPECT_TRUE(body_lhs->result_type()->Is<ast::type::I32>());
-  EXPECT_TRUE(body_rhs->result_type()->Is<ast::type::F32>());
-  EXPECT_TRUE(continuing_lhs->result_type()->Is<ast::type::I32>());
-  EXPECT_TRUE(continuing_rhs->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(body_lhs->result_type()->Is<type::I32>());
+  EXPECT_TRUE(body_rhs->result_type()->Is<type::F32>());
+  EXPECT_TRUE(continuing_lhs->result_type()->Is<type::I32>());
+  EXPECT_TRUE(continuing_rhs->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Stmt_Return) {
@@ -255,7 +255,7 @@
 
   EXPECT_TRUE(td()->DetermineResultType(ret));
   ASSERT_NE(cond->result_type(), nullptr);
-  EXPECT_TRUE(cond->result_type()->Is<ast::type::I32>());
+  EXPECT_TRUE(cond->result_type()->Is<type::I32>());
 }
 
 TEST_F(TypeDeterminerTest, Stmt_Return_WithoutValue) {
@@ -283,9 +283,9 @@
   ASSERT_NE(lhs->result_type(), nullptr);
   ASSERT_NE(rhs->result_type(), nullptr);
 
-  EXPECT_TRUE(stmt->condition()->result_type()->Is<ast::type::I32>());
-  EXPECT_TRUE(lhs->result_type()->Is<ast::type::I32>());
-  EXPECT_TRUE(rhs->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(stmt->condition()->result_type()->Is<type::I32>());
+  EXPECT_TRUE(lhs->result_type()->Is<type::I32>());
+  EXPECT_TRUE(rhs->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Stmt_Call) {
@@ -302,7 +302,7 @@
   auto* call = create<ast::CallStatement>(expr);
   EXPECT_TRUE(td()->DetermineResultType(call));
   ASSERT_NE(expr->result_type(), nullptr);
-  EXPECT_TRUE(expr->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(expr->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Stmt_Call_undeclared) {
@@ -342,7 +342,7 @@
 
   EXPECT_TRUE(td()->DetermineResultType(decl));
   ASSERT_NE(init->result_type(), nullptr);
-  EXPECT_TRUE(init->result_type()->Is<ast::type::I32>());
+  EXPECT_TRUE(init->result_type()->Is<type::I32>());
 }
 
 TEST_F(TypeDeterminerTest, Stmt_VariableDecl_ModuleScope) {
@@ -354,7 +354,7 @@
 
   EXPECT_TRUE(td()->Determine());
   ASSERT_NE(init->result_type(), nullptr);
-  EXPECT_TRUE(init->result_type()->Is<ast::type::I32>());
+  EXPECT_TRUE(init->result_type()->Is<type::I32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Error_Unknown) {
@@ -374,10 +374,10 @@
   auto* acc = IndexAccessor("my_var", idx);
   EXPECT_TRUE(td()->DetermineResultType(acc));
   ASSERT_NE(acc->result_type(), nullptr);
-  ASSERT_TRUE(acc->result_type()->Is<ast::type::Pointer>());
+  ASSERT_TRUE(acc->result_type()->Is<type::Pointer>());
 
-  auto* ptr = acc->result_type()->As<ast::type::Pointer>();
-  EXPECT_TRUE(ptr->type()->Is<ast::type::F32>());
+  auto* ptr = acc->result_type()->As<type::Pointer>();
+  EXPECT_TRUE(ptr->type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_ArrayAccessor_Alias_Array) {
@@ -390,10 +390,10 @@
   auto* acc = IndexAccessor("my_var", 2);
   EXPECT_TRUE(td()->DetermineResultType(acc));
   ASSERT_NE(acc->result_type(), nullptr);
-  ASSERT_TRUE(acc->result_type()->Is<ast::type::Pointer>());
+  ASSERT_TRUE(acc->result_type()->Is<type::Pointer>());
 
-  auto* ptr = acc->result_type()->As<ast::type::Pointer>();
-  EXPECT_TRUE(ptr->type()->Is<ast::type::F32>());
+  auto* ptr = acc->result_type()->As<type::Pointer>();
+  EXPECT_TRUE(ptr->type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_ArrayAccessor_Array_Constant) {
@@ -405,7 +405,7 @@
   auto* acc = IndexAccessor("my_var", 2);
   EXPECT_TRUE(td()->DetermineResultType(acc));
   ASSERT_NE(acc->result_type(), nullptr);
-  EXPECT_TRUE(acc->result_type()->Is<ast::type::F32>())
+  EXPECT_TRUE(acc->result_type()->Is<type::F32>())
       << acc->result_type()->type_name();
 }
 
@@ -418,11 +418,11 @@
   auto* acc = IndexAccessor("my_var", 2);
   EXPECT_TRUE(td()->DetermineResultType(acc));
   ASSERT_NE(acc->result_type(), nullptr);
-  ASSERT_TRUE(acc->result_type()->Is<ast::type::Pointer>());
+  ASSERT_TRUE(acc->result_type()->Is<type::Pointer>());
 
-  auto* ptr = acc->result_type()->As<ast::type::Pointer>();
-  ASSERT_TRUE(ptr->type()->Is<ast::type::Vector>());
-  EXPECT_EQ(ptr->type()->As<ast::type::Vector>()->size(), 3u);
+  auto* ptr = acc->result_type()->As<type::Pointer>();
+  ASSERT_TRUE(ptr->type()->Is<type::Vector>());
+  EXPECT_EQ(ptr->type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_ArrayAccessor_Matrix_BothDimensions) {
@@ -435,10 +435,10 @@
 
   EXPECT_TRUE(td()->DetermineResultType(acc));
   ASSERT_NE(acc->result_type(), nullptr);
-  ASSERT_TRUE(acc->result_type()->Is<ast::type::Pointer>());
+  ASSERT_TRUE(acc->result_type()->Is<type::Pointer>());
 
-  auto* ptr = acc->result_type()->As<ast::type::Pointer>();
-  EXPECT_TRUE(ptr->type()->Is<ast::type::F32>());
+  auto* ptr = acc->result_type()->As<type::Pointer>();
+  EXPECT_TRUE(ptr->type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_ArrayAccessor_Vector) {
@@ -450,10 +450,10 @@
   auto* acc = IndexAccessor("my_var", 2);
   EXPECT_TRUE(td()->DetermineResultType(acc));
   ASSERT_NE(acc->result_type(), nullptr);
-  ASSERT_TRUE(acc->result_type()->Is<ast::type::Pointer>());
+  ASSERT_TRUE(acc->result_type()->Is<type::Pointer>());
 
-  auto* ptr = acc->result_type()->As<ast::type::Pointer>();
-  EXPECT_TRUE(ptr->type()->Is<ast::type::F32>());
+  auto* ptr = acc->result_type()->As<type::Pointer>();
+  EXPECT_TRUE(ptr->type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Bitcast) {
@@ -464,7 +464,7 @@
 
   EXPECT_TRUE(td()->DetermineResultType(bitcast));
   ASSERT_NE(bitcast->result_type(), nullptr);
-  EXPECT_TRUE(bitcast->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(bitcast->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Call) {
@@ -479,7 +479,7 @@
   auto* call = Call("my_func");
   EXPECT_TRUE(td()->DetermineResultType(call));
   ASSERT_NE(call->result_type(), nullptr);
-  EXPECT_TRUE(call->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(call->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Call_WithParams) {
@@ -496,7 +496,7 @@
   auto* call = Call("my_func", param);
   EXPECT_TRUE(td()->DetermineResultType(call));
   ASSERT_NE(param->result_type(), nullptr);
-  EXPECT_TRUE(param->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(param->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Call_Intrinsic) {
@@ -507,7 +507,7 @@
 
   EXPECT_TRUE(td()->DetermineResultType(call));
   ASSERT_NE(call->result_type(), nullptr);
-  EXPECT_TRUE(call->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(call->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Cast) {
@@ -518,14 +518,14 @@
 
   EXPECT_TRUE(td()->DetermineResultType(cast));
   ASSERT_NE(cast->result_type(), nullptr);
-  EXPECT_TRUE(cast->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(cast->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Constructor_Scalar) {
   auto* s = Expr(1.0f);
   EXPECT_TRUE(td()->DetermineResultType(s));
   ASSERT_NE(s->result_type(), nullptr);
-  EXPECT_TRUE(s->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(s->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Constructor_Type) {
@@ -533,10 +533,9 @@
 
   EXPECT_TRUE(td()->DetermineResultType(tc));
   ASSERT_NE(tc->result_type(), nullptr);
-  ASSERT_TRUE(tc->result_type()->Is<ast::type::Vector>());
-  EXPECT_TRUE(
-      tc->result_type()->As<ast::type::Vector>()->type()->Is<ast::type::F32>());
-  EXPECT_EQ(tc->result_type()->As<ast::type::Vector>()->size(), 3u);
+  ASSERT_TRUE(tc->result_type()->Is<type::Vector>());
+  EXPECT_TRUE(tc->result_type()->As<type::Vector>()->type()->Is<type::F32>());
+  EXPECT_EQ(tc->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_Identifier_GlobalVariable) {
@@ -548,11 +547,9 @@
   auto* ident = Expr("my_var");
   EXPECT_TRUE(td()->DetermineResultType(ident));
   ASSERT_NE(ident->result_type(), nullptr);
-  EXPECT_TRUE(ident->result_type()->Is<ast::type::Pointer>());
-  EXPECT_TRUE(ident->result_type()
-                  ->As<ast::type::Pointer>()
-                  ->type()
-                  ->Is<ast::type::F32>());
+  EXPECT_TRUE(ident->result_type()->Is<type::Pointer>());
+  EXPECT_TRUE(
+      ident->result_type()->As<type::Pointer>()->type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Identifier_GlobalConstant) {
@@ -563,7 +560,7 @@
   auto* ident = Expr("my_var");
   EXPECT_TRUE(td()->DetermineResultType(ident));
   ASSERT_NE(ident->result_type(), nullptr);
-  EXPECT_TRUE(ident->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ident->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Identifier_FunctionVariable_Const) {
@@ -581,7 +578,7 @@
   EXPECT_TRUE(td()->DetermineFunction(f));
 
   ASSERT_NE(my_var->result_type(), nullptr);
-  EXPECT_TRUE(my_var->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(my_var->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Identifier_FunctionVariable) {
@@ -598,15 +595,13 @@
   EXPECT_TRUE(td()->DetermineFunction(f));
 
   ASSERT_NE(my_var->result_type(), nullptr);
-  EXPECT_TRUE(my_var->result_type()->Is<ast::type::Pointer>());
-  EXPECT_TRUE(my_var->result_type()
-                  ->As<ast::type::Pointer>()
-                  ->type()
-                  ->Is<ast::type::F32>());
+  EXPECT_TRUE(my_var->result_type()->Is<type::Pointer>());
+  EXPECT_TRUE(
+      my_var->result_type()->As<type::Pointer>()->type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Identifier_Function_Ptr) {
-  ast::type::Pointer ptr(ty.f32, ast::StorageClass::kFunction);
+  type::Pointer ptr(ty.f32, ast::StorageClass::kFunction);
 
   auto* my_var = Expr("my_var");
 
@@ -621,11 +616,9 @@
   EXPECT_TRUE(td()->DetermineFunction(f));
 
   ASSERT_NE(my_var->result_type(), nullptr);
-  EXPECT_TRUE(my_var->result_type()->Is<ast::type::Pointer>());
-  EXPECT_TRUE(my_var->result_type()
-                  ->As<ast::type::Pointer>()
-                  ->type()
-                  ->Is<ast::type::F32>());
+  EXPECT_TRUE(my_var->result_type()->Is<type::Pointer>());
+  EXPECT_TRUE(
+      my_var->result_type()->As<type::Pointer>()->type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Identifier_Function) {
@@ -639,7 +632,7 @@
   auto* ident = Expr("my_func");
   EXPECT_TRUE(td()->DetermineResultType(ident));
   ASSERT_NE(ident->result_type(), nullptr);
-  EXPECT_TRUE(ident->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ident->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Identifier_Unknown) {
@@ -768,10 +761,10 @@
   auto* mem = MemberAccessor("my_struct", "second_member");
   EXPECT_TRUE(td()->DetermineResultType(mem));
   ASSERT_NE(mem->result_type(), nullptr);
-  ASSERT_TRUE(mem->result_type()->Is<ast::type::Pointer>());
+  ASSERT_TRUE(mem->result_type()->Is<type::Pointer>());
 
-  auto* ptr = mem->result_type()->As<ast::type::Pointer>();
-  EXPECT_TRUE(ptr->type()->Is<ast::type::F32>());
+  auto* ptr = mem->result_type()->As<type::Pointer>();
+  EXPECT_TRUE(ptr->type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_MemberAccessor_Struct_Alias) {
@@ -791,10 +784,10 @@
   auto* mem = MemberAccessor("my_struct", "second_member");
   EXPECT_TRUE(td()->DetermineResultType(mem));
   ASSERT_NE(mem->result_type(), nullptr);
-  ASSERT_TRUE(mem->result_type()->Is<ast::type::Pointer>());
+  ASSERT_TRUE(mem->result_type()->Is<type::Pointer>());
 
-  auto* ptr = mem->result_type()->As<ast::type::Pointer>();
-  EXPECT_TRUE(ptr->type()->Is<ast::type::F32>());
+  auto* ptr = mem->result_type()->As<type::Pointer>();
+  EXPECT_TRUE(ptr->type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_MemberAccessor_VectorSwizzle) {
@@ -806,12 +799,9 @@
   auto* mem = MemberAccessor("my_vec", "xy");
   EXPECT_TRUE(td()->DetermineResultType(mem)) << td()->error();
   ASSERT_NE(mem->result_type(), nullptr);
-  ASSERT_TRUE(mem->result_type()->Is<ast::type::Vector>());
-  EXPECT_TRUE(mem->result_type()
-                  ->As<ast::type::Vector>()
-                  ->type()
-                  ->Is<ast::type::F32>());
-  EXPECT_EQ(mem->result_type()->As<ast::type::Vector>()->size(), 2u);
+  ASSERT_TRUE(mem->result_type()->Is<type::Vector>());
+  EXPECT_TRUE(mem->result_type()->As<type::Vector>()->type()->Is<type::F32>());
+  EXPECT_EQ(mem->result_type()->As<type::Vector>()->size(), 2u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_MemberAccessor_VectorSwizzle_SingleElement) {
@@ -823,10 +813,10 @@
   auto* mem = MemberAccessor("my_vec", "x");
   EXPECT_TRUE(td()->DetermineResultType(mem)) << td()->error();
   ASSERT_NE(mem->result_type(), nullptr);
-  ASSERT_TRUE(mem->result_type()->Is<ast::type::Pointer>());
+  ASSERT_TRUE(mem->result_type()->Is<type::Pointer>());
 
-  auto* ptr = mem->result_type()->As<ast::type::Pointer>();
-  ASSERT_TRUE(ptr->type()->Is<ast::type::F32>());
+  auto* ptr = mem->result_type()->As<type::Pointer>();
+  ASSERT_TRUE(ptr->type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Accessor_MultiLevel) {
@@ -860,7 +850,7 @@
                           ast::StructDecorationList{});
   auto* stB = ty.struct_("B", strctB);
 
-  ast::type::Vector vecB(stB, 3);
+  type::Vector vecB(stB, 3);
   auto* strctA = create<ast::Struct>(
       ast::StructMemberList{Member("mem", &vecB)}, ast::StructDecorationList{});
 
@@ -875,12 +865,9 @@
   EXPECT_TRUE(td()->DetermineResultType(mem)) << td()->error();
 
   ASSERT_NE(mem->result_type(), nullptr);
-  ASSERT_TRUE(mem->result_type()->Is<ast::type::Vector>());
-  EXPECT_TRUE(mem->result_type()
-                  ->As<ast::type::Vector>()
-                  ->type()
-                  ->Is<ast::type::F32>());
-  EXPECT_EQ(mem->result_type()->As<ast::type::Vector>()->size(), 2u);
+  ASSERT_TRUE(mem->result_type()->Is<type::Vector>());
+  EXPECT_TRUE(mem->result_type()->As<type::Vector>()->type()->Is<type::F32>());
+  EXPECT_EQ(mem->result_type()->As<type::Vector>()->size(), 2u);
 }
 
 using Expr_Binary_BitwiseTest = TypeDeterminerTestWithParam<ast::BinaryOp>;
@@ -897,7 +884,7 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  EXPECT_TRUE(expr->result_type()->Is<ast::type::I32>());
+  EXPECT_TRUE(expr->result_type()->Is<type::I32>());
 }
 
 TEST_P(Expr_Binary_BitwiseTest, Vector) {
@@ -913,12 +900,9 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Vector>());
-  EXPECT_TRUE(expr->result_type()
-                  ->As<ast::type::Vector>()
-                  ->type()
-                  ->Is<ast::type::I32>());
-  EXPECT_EQ(expr->result_type()->As<ast::type::Vector>()->size(), 3u);
+  ASSERT_TRUE(expr->result_type()->Is<type::Vector>());
+  EXPECT_TRUE(expr->result_type()->As<type::Vector>()->type()->Is<type::I32>());
+  EXPECT_EQ(expr->result_type()->As<type::Vector>()->size(), 3u);
 }
 INSTANTIATE_TEST_SUITE_P(TypeDeterminerTest,
                          Expr_Binary_BitwiseTest,
@@ -946,7 +930,7 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  EXPECT_TRUE(expr->result_type()->Is<ast::type::Bool>());
+  EXPECT_TRUE(expr->result_type()->Is<type::Bool>());
 }
 
 TEST_P(Expr_Binary_LogicalTest, Vector) {
@@ -962,12 +946,10 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Vector>());
-  EXPECT_TRUE(expr->result_type()
-                  ->As<ast::type::Vector>()
-                  ->type()
-                  ->Is<ast::type::Bool>());
-  EXPECT_EQ(expr->result_type()->As<ast::type::Vector>()->size(), 3u);
+  ASSERT_TRUE(expr->result_type()->Is<type::Vector>());
+  EXPECT_TRUE(
+      expr->result_type()->As<type::Vector>()->type()->Is<type::Bool>());
+  EXPECT_EQ(expr->result_type()->As<type::Vector>()->size(), 3u);
 }
 INSTANTIATE_TEST_SUITE_P(TypeDeterminerTest,
                          Expr_Binary_LogicalTest,
@@ -988,7 +970,7 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  EXPECT_TRUE(expr->result_type()->Is<ast::type::Bool>());
+  EXPECT_TRUE(expr->result_type()->Is<type::Bool>());
 }
 
 TEST_P(Expr_Binary_CompareTest, Vector) {
@@ -1004,12 +986,10 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Vector>());
-  EXPECT_TRUE(expr->result_type()
-                  ->As<ast::type::Vector>()
-                  ->type()
-                  ->Is<ast::type::Bool>());
-  EXPECT_EQ(expr->result_type()->As<ast::type::Vector>()->size(), 3u);
+  ASSERT_TRUE(expr->result_type()->Is<type::Vector>());
+  EXPECT_TRUE(
+      expr->result_type()->As<type::Vector>()->type()->Is<type::Bool>());
+  EXPECT_EQ(expr->result_type()->As<type::Vector>()->size(), 3u);
 }
 INSTANTIATE_TEST_SUITE_P(TypeDeterminerTest,
                          Expr_Binary_CompareTest,
@@ -1031,7 +1011,7 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  EXPECT_TRUE(expr->result_type()->Is<ast::type::I32>());
+  EXPECT_TRUE(expr->result_type()->Is<type::I32>());
 }
 
 TEST_F(TypeDeterminerTest, Expr_Binary_Multiply_Vector_Scalar) {
@@ -1046,12 +1026,9 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Vector>());
-  EXPECT_TRUE(expr->result_type()
-                  ->As<ast::type::Vector>()
-                  ->type()
-                  ->Is<ast::type::F32>());
-  EXPECT_EQ(expr->result_type()->As<ast::type::Vector>()->size(), 3u);
+  ASSERT_TRUE(expr->result_type()->Is<type::Vector>());
+  EXPECT_TRUE(expr->result_type()->As<type::Vector>()->type()->Is<type::F32>());
+  EXPECT_EQ(expr->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_Binary_Multiply_Scalar_Vector) {
@@ -1066,12 +1043,9 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Vector>());
-  EXPECT_TRUE(expr->result_type()
-                  ->As<ast::type::Vector>()
-                  ->type()
-                  ->Is<ast::type::F32>());
-  EXPECT_EQ(expr->result_type()->As<ast::type::Vector>()->size(), 3u);
+  ASSERT_TRUE(expr->result_type()->Is<type::Vector>());
+  EXPECT_TRUE(expr->result_type()->As<type::Vector>()->type()->Is<type::F32>());
+  EXPECT_EQ(expr->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_Binary_Multiply_Vector_Vector) {
@@ -1084,12 +1058,9 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Vector>());
-  EXPECT_TRUE(expr->result_type()
-                  ->As<ast::type::Vector>()
-                  ->type()
-                  ->Is<ast::type::F32>());
-  EXPECT_EQ(expr->result_type()->As<ast::type::Vector>()->size(), 3u);
+  ASSERT_TRUE(expr->result_type()->Is<type::Vector>());
+  EXPECT_TRUE(expr->result_type()->As<type::Vector>()->type()->Is<type::F32>());
+  EXPECT_EQ(expr->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_Binary_Multiply_Matrix_Scalar) {
@@ -1104,10 +1075,10 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Matrix>());
+  ASSERT_TRUE(expr->result_type()->Is<type::Matrix>());
 
-  auto* mat = expr->result_type()->As<ast::type::Matrix>();
-  EXPECT_TRUE(mat->type()->Is<ast::type::F32>());
+  auto* mat = expr->result_type()->As<type::Matrix>();
+  EXPECT_TRUE(mat->type()->Is<type::F32>());
   EXPECT_EQ(mat->rows(), 3u);
   EXPECT_EQ(mat->columns(), 2u);
 }
@@ -1124,10 +1095,10 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Matrix>());
+  ASSERT_TRUE(expr->result_type()->Is<type::Matrix>());
 
-  auto* mat = expr->result_type()->As<ast::type::Matrix>();
-  EXPECT_TRUE(mat->type()->Is<ast::type::F32>());
+  auto* mat = expr->result_type()->As<type::Matrix>();
+  EXPECT_TRUE(mat->type()->Is<type::F32>());
   EXPECT_EQ(mat->rows(), 3u);
   EXPECT_EQ(mat->columns(), 2u);
 }
@@ -1144,12 +1115,9 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Vector>());
-  EXPECT_TRUE(expr->result_type()
-                  ->As<ast::type::Vector>()
-                  ->type()
-                  ->Is<ast::type::F32>());
-  EXPECT_EQ(expr->result_type()->As<ast::type::Vector>()->size(), 3u);
+  ASSERT_TRUE(expr->result_type()->Is<type::Vector>());
+  EXPECT_TRUE(expr->result_type()->As<type::Vector>()->type()->Is<type::F32>());
+  EXPECT_EQ(expr->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_Binary_Multiply_Vector_Matrix) {
@@ -1164,12 +1132,9 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Vector>());
-  EXPECT_TRUE(expr->result_type()
-                  ->As<ast::type::Vector>()
-                  ->type()
-                  ->Is<ast::type::F32>());
-  EXPECT_EQ(expr->result_type()->As<ast::type::Vector>()->size(), 2u);
+  ASSERT_TRUE(expr->result_type()->Is<type::Vector>());
+  EXPECT_TRUE(expr->result_type()->As<type::Vector>()->type()->Is<type::F32>());
+  EXPECT_EQ(expr->result_type()->As<type::Vector>()->size(), 2u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_Binary_Multiply_Matrix_Matrix) {
@@ -1184,10 +1149,10 @@
 
   ASSERT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Matrix>());
+  ASSERT_TRUE(expr->result_type()->Is<type::Matrix>());
 
-  auto* mat = expr->result_type()->As<ast::type::Matrix>();
-  EXPECT_TRUE(mat->type()->Is<ast::type::F32>());
+  auto* mat = expr->result_type()->As<type::Matrix>();
+  EXPECT_TRUE(mat->type()->Is<type::F32>());
   EXPECT_EQ(mat->rows(), 4u);
   EXPECT_EQ(mat->columns(), 4u);
 }
@@ -1206,7 +1171,7 @@
   EXPECT_TRUE(td()->DetermineResultType(expr));
 
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::F32>());
+  ASSERT_TRUE(expr->result_type()->Is<type::F32>());
 }
 
 TEST_P(IntrinsicDerivativeTest, Vector) {
@@ -1222,12 +1187,9 @@
   EXPECT_TRUE(td()->DetermineResultType(expr));
 
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Vector>());
-  EXPECT_TRUE(expr->result_type()
-                  ->As<ast::type::Vector>()
-                  ->type()
-                  ->Is<ast::type::F32>());
-  EXPECT_EQ(expr->result_type()->As<ast::type::Vector>()->size(), 4u);
+  ASSERT_TRUE(expr->result_type()->Is<type::Vector>());
+  EXPECT_TRUE(expr->result_type()->As<type::Vector>()->type()->Is<type::F32>());
+  EXPECT_EQ(expr->result_type()->As<type::Vector>()->size(), 4u);
 }
 
 TEST_P(IntrinsicDerivativeTest, MissingParam) {
@@ -1281,7 +1243,7 @@
 
   EXPECT_TRUE(td()->DetermineResultType(expr));
   ASSERT_NE(expr->result_type(), nullptr);
-  EXPECT_TRUE(expr->result_type()->Is<ast::type::Bool>());
+  EXPECT_TRUE(expr->result_type()->Is<type::Bool>());
 }
 INSTANTIATE_TEST_SUITE_P(TypeDeterminerTest,
                          Intrinsic,
@@ -1302,12 +1264,10 @@
   EXPECT_TRUE(td()->DetermineResultType(expr));
 
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Vector>());
-  EXPECT_TRUE(expr->result_type()
-                  ->As<ast::type::Vector>()
-                  ->type()
-                  ->Is<ast::type::Bool>());
-  EXPECT_EQ(expr->result_type()->As<ast::type::Vector>()->size(), 3u);
+  ASSERT_TRUE(expr->result_type()->Is<type::Vector>());
+  EXPECT_TRUE(
+      expr->result_type()->As<type::Vector>()->type()->Is<type::Bool>());
+  EXPECT_EQ(expr->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_P(Intrinsic_FloatMethod, Scalar) {
@@ -1323,7 +1283,7 @@
   EXPECT_TRUE(td()->Determine());
   EXPECT_TRUE(td()->DetermineResultType(expr));
   ASSERT_NE(expr->result_type(), nullptr);
-  EXPECT_TRUE(expr->result_type()->Is<ast::type::Bool>());
+  EXPECT_TRUE(expr->result_type()->Is<type::Bool>());
 }
 
 TEST_P(Intrinsic_FloatMethod, MissingParam) {
@@ -1373,9 +1333,9 @@
 }
 
 struct TextureTestParams {
-  ast::type::TextureDimension dim;
+  type::TextureDimension dim;
   Texture type = Texture::kF32;
-  ast::type::ImageFormat format = ast::type::ImageFormat::kR16Float;
+  type::ImageFormat format = type::ImageFormat::kR16Float;
 };
 inline std::ostream& operator<<(std::ostream& out, TextureTestParams data) {
   out << data.dim << "_" << data.type;
@@ -1385,43 +1345,42 @@
 class Intrinsic_TextureOperation
     : public TypeDeterminerTestWithParam<TextureTestParams> {
  public:
-  std::unique_ptr<ast::type::Type> get_coords_type(
-      ast::type::TextureDimension dim,
-      ast::type::Type* type) {
-    if (dim == ast::type::TextureDimension::k1d) {
-      if (type->Is<ast::type::I32>()) {
-        return std::make_unique<ast::type::I32>();
-      } else if (type->Is<ast::type::U32>()) {
-        return std::make_unique<ast::type::U32>();
+  std::unique_ptr<type::Type> get_coords_type(type::TextureDimension dim,
+                                              type::Type* type) {
+    if (dim == type::TextureDimension::k1d) {
+      if (type->Is<type::I32>()) {
+        return std::make_unique<type::I32>();
+      } else if (type->Is<type::U32>()) {
+        return std::make_unique<type::U32>();
       } else {
-        return std::make_unique<ast::type::F32>();
+        return std::make_unique<type::F32>();
       }
-    } else if (dim == ast::type::TextureDimension::k1dArray ||
-               dim == ast::type::TextureDimension::k2d) {
-      return std::make_unique<ast::type::Vector>(type, 2);
-    } else if (dim == ast::type::TextureDimension::kCubeArray) {
-      return std::make_unique<ast::type::Vector>(type, 4);
+    } else if (dim == type::TextureDimension::k1dArray ||
+               dim == type::TextureDimension::k2d) {
+      return std::make_unique<type::Vector>(type, 2);
+    } else if (dim == type::TextureDimension::kCubeArray) {
+      return std::make_unique<type::Vector>(type, 4);
     } else {
-      return std::make_unique<ast::type::Vector>(type, 3);
+      return std::make_unique<type::Vector>(type, 3);
     }
   }
 
   void add_call_param(std::string name,
-                      ast::type::Type* type,
+                      type::Type* type,
                       ast::ExpressionList* call_params) {
     auto* var = Var(name, ast::StorageClass::kNone, type);
     mod->AddGlobalVariable(var);
     call_params->push_back(Expr(name));
   }
 
-  std::unique_ptr<ast::type::Type> subtype(Texture type) {
+  std::unique_ptr<type::Type> subtype(Texture type) {
     if (type == Texture::kF32) {
-      return std::make_unique<ast::type::F32>();
+      return std::make_unique<type::F32>();
     }
     if (type == Texture::kI32) {
-      return std::make_unique<ast::type::I32>();
+      return std::make_unique<type::I32>();
     }
-    return std::make_unique<ast::type::U32>();
+    return std::make_unique<type::U32>();
   }
 };
 
@@ -1433,8 +1392,7 @@
 
   auto coords_type = get_coords_type(dim, ty.i32);
 
-  ast::type::Type* texture_type =
-      mod->create<ast::type::StorageTexture>(dim, format);
+  type::Type* texture_type = mod->create<type::StorageTexture>(dim, format);
 
   ast::ExpressionList call_params;
 
@@ -1448,69 +1406,63 @@
   EXPECT_TRUE(td()->DetermineResultType(expr));
 
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Vector>());
+  ASSERT_TRUE(expr->result_type()->Is<type::Vector>());
   if (type == Texture::kF32) {
-    EXPECT_TRUE(expr->result_type()
-                    ->As<ast::type::Vector>()
-                    ->type()
-                    ->Is<ast::type::F32>());
+    EXPECT_TRUE(
+        expr->result_type()->As<type::Vector>()->type()->Is<type::F32>());
   } else if (type == Texture::kI32) {
-    EXPECT_TRUE(expr->result_type()
-                    ->As<ast::type::Vector>()
-                    ->type()
-                    ->Is<ast::type::I32>());
+    EXPECT_TRUE(
+        expr->result_type()->As<type::Vector>()->type()->Is<type::I32>());
   } else {
-    EXPECT_TRUE(expr->result_type()
-                    ->As<ast::type::Vector>()
-                    ->type()
-                    ->Is<ast::type::U32>());
+    EXPECT_TRUE(
+        expr->result_type()->As<type::Vector>()->type()->Is<type::U32>());
   }
-  EXPECT_EQ(expr->result_type()->As<ast::type::Vector>()->size(), 4u);
+  EXPECT_EQ(expr->result_type()->As<type::Vector>()->size(), 4u);
 }
 
 INSTANTIATE_TEST_SUITE_P(
     TypeDeterminerTest,
     Intrinsic_StorageTextureOperation,
     testing::Values(
-        TextureTestParams{ast::type::TextureDimension::k1d, Texture::kF32,
-                          ast::type::ImageFormat::kR16Float},
-        TextureTestParams{ast::type::TextureDimension::k1d, Texture::kI32,
-                          ast::type::ImageFormat::kR16Sint},
-        TextureTestParams{ast::type::TextureDimension::k1d, Texture::kF32,
-                          ast::type::ImageFormat::kR8Unorm},
-        TextureTestParams{ast::type::TextureDimension::k1dArray, Texture::kF32,
-                          ast::type::ImageFormat::kR16Float},
-        TextureTestParams{ast::type::TextureDimension::k1dArray, Texture::kI32,
-                          ast::type::ImageFormat::kR16Sint},
-        TextureTestParams{ast::type::TextureDimension::k1dArray, Texture::kF32,
-                          ast::type::ImageFormat::kR8Unorm},
-        TextureTestParams{ast::type::TextureDimension::k2d, Texture::kF32,
-                          ast::type::ImageFormat::kR16Float},
-        TextureTestParams{ast::type::TextureDimension::k2d, Texture::kI32,
-                          ast::type::ImageFormat::kR16Sint},
-        TextureTestParams{ast::type::TextureDimension::k2d, Texture::kF32,
-                          ast::type::ImageFormat::kR8Unorm},
-        TextureTestParams{ast::type::TextureDimension::k2dArray, Texture::kF32,
-                          ast::type::ImageFormat::kR16Float},
-        TextureTestParams{ast::type::TextureDimension::k2dArray, Texture::kI32,
-                          ast::type::ImageFormat::kR16Sint},
-        TextureTestParams{ast::type::TextureDimension::k2dArray, Texture::kF32,
-                          ast::type::ImageFormat::kR8Unorm},
-        TextureTestParams{ast::type::TextureDimension::k3d, Texture::kF32,
-                          ast::type::ImageFormat::kR16Float},
-        TextureTestParams{ast::type::TextureDimension::k3d, Texture::kI32,
-                          ast::type::ImageFormat::kR16Sint},
-        TextureTestParams{ast::type::TextureDimension::k3d, Texture::kF32,
-                          ast::type::ImageFormat::kR8Unorm}));
+        TextureTestParams{type::TextureDimension::k1d, Texture::kF32,
+                          type::ImageFormat::kR16Float},
+        TextureTestParams{type::TextureDimension::k1d, Texture::kI32,
+                          type::ImageFormat::kR16Sint},
+        TextureTestParams{type::TextureDimension::k1d, Texture::kF32,
+                          type::ImageFormat::kR8Unorm},
+        TextureTestParams{type::TextureDimension::k1dArray, Texture::kF32,
+                          type::ImageFormat::kR16Float},
+        TextureTestParams{type::TextureDimension::k1dArray, Texture::kI32,
+                          type::ImageFormat::kR16Sint},
+        TextureTestParams{type::TextureDimension::k1dArray, Texture::kF32,
+                          type::ImageFormat::kR8Unorm},
+        TextureTestParams{type::TextureDimension::k2d, Texture::kF32,
+                          type::ImageFormat::kR16Float},
+        TextureTestParams{type::TextureDimension::k2d, Texture::kI32,
+                          type::ImageFormat::kR16Sint},
+        TextureTestParams{type::TextureDimension::k2d, Texture::kF32,
+                          type::ImageFormat::kR8Unorm},
+        TextureTestParams{type::TextureDimension::k2dArray, Texture::kF32,
+                          type::ImageFormat::kR16Float},
+        TextureTestParams{type::TextureDimension::k2dArray, Texture::kI32,
+                          type::ImageFormat::kR16Sint},
+        TextureTestParams{type::TextureDimension::k2dArray, Texture::kF32,
+                          type::ImageFormat::kR8Unorm},
+        TextureTestParams{type::TextureDimension::k3d, Texture::kF32,
+                          type::ImageFormat::kR16Float},
+        TextureTestParams{type::TextureDimension::k3d, Texture::kI32,
+                          type::ImageFormat::kR16Sint},
+        TextureTestParams{type::TextureDimension::k3d, Texture::kF32,
+                          type::ImageFormat::kR8Unorm}));
 
 using Intrinsic_SampledTextureOperation = Intrinsic_TextureOperation;
 TEST_P(Intrinsic_SampledTextureOperation, TextureLoadSampled) {
   auto dim = GetParam().dim;
   auto type = GetParam().type;
 
-  std::unique_ptr<ast::type::Type> s = subtype(type);
+  std::unique_ptr<type::Type> s = subtype(type);
   auto coords_type = get_coords_type(dim, ty.i32);
-  auto texture_type = std::make_unique<ast::type::SampledTexture>(dim, s.get());
+  auto texture_type = std::make_unique<type::SampledTexture>(dim, s.get());
 
   ast::ExpressionList call_params;
 
@@ -1524,34 +1476,27 @@
   EXPECT_TRUE(td()->DetermineResultType(expr));
 
   ASSERT_NE(expr->result_type(), nullptr);
-  ASSERT_TRUE(expr->result_type()->Is<ast::type::Vector>());
+  ASSERT_TRUE(expr->result_type()->Is<type::Vector>());
   if (type == Texture::kF32) {
-    EXPECT_TRUE(expr->result_type()
-                    ->As<ast::type::Vector>()
-                    ->type()
-                    ->Is<ast::type::F32>());
+    EXPECT_TRUE(
+        expr->result_type()->As<type::Vector>()->type()->Is<type::F32>());
   } else if (type == Texture::kI32) {
-    EXPECT_TRUE(expr->result_type()
-                    ->As<ast::type::Vector>()
-                    ->type()
-                    ->Is<ast::type::I32>());
+    EXPECT_TRUE(
+        expr->result_type()->As<type::Vector>()->type()->Is<type::I32>());
   } else {
-    EXPECT_TRUE(expr->result_type()
-                    ->As<ast::type::Vector>()
-                    ->type()
-                    ->Is<ast::type::U32>());
+    EXPECT_TRUE(
+        expr->result_type()->As<type::Vector>()->type()->Is<type::U32>());
   }
-  EXPECT_EQ(expr->result_type()->As<ast::type::Vector>()->size(), 4u);
+  EXPECT_EQ(expr->result_type()->As<type::Vector>()->size(), 4u);
 }
 
 INSTANTIATE_TEST_SUITE_P(
     TypeDeterminerTest,
     Intrinsic_SampledTextureOperation,
-    testing::Values(TextureTestParams{ast::type::TextureDimension::k2d},
-                    TextureTestParams{ast::type::TextureDimension::k2dArray},
-                    TextureTestParams{ast::type::TextureDimension::kCube},
-                    TextureTestParams{
-                        ast::type::TextureDimension::kCubeArray}));
+    testing::Values(TextureTestParams{type::TextureDimension::k2d},
+                    TextureTestParams{type::TextureDimension::k2dArray},
+                    TextureTestParams{type::TextureDimension::kCube},
+                    TextureTestParams{type::TextureDimension::kCubeArray}));
 
 TEST_F(TypeDeterminerTest, Intrinsic_Dot) {
   auto* var = Var("my_var", ast::StorageClass::kNone, ty.vec3<f32>());
@@ -1564,7 +1509,7 @@
   EXPECT_TRUE(td()->Determine());
   EXPECT_TRUE(td()->DetermineResultType(expr));
   ASSERT_NE(expr->result_type(), nullptr);
-  EXPECT_TRUE(expr->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(expr->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Intrinsic_Select) {
@@ -1581,12 +1526,9 @@
   EXPECT_TRUE(td()->Determine());
   EXPECT_TRUE(td()->DetermineResultType(expr)) << td()->error();
   ASSERT_NE(expr->result_type(), nullptr);
-  EXPECT_TRUE(expr->result_type()->Is<ast::type::Vector>());
-  EXPECT_EQ(expr->result_type()->As<ast::type::Vector>()->size(), 3u);
-  EXPECT_TRUE(expr->result_type()
-                  ->As<ast::type::Vector>()
-                  ->type()
-                  ->Is<ast::type::F32>());
+  EXPECT_TRUE(expr->result_type()->Is<type::Vector>());
+  EXPECT_EQ(expr->result_type()->As<type::Vector>()->size(), 3u);
+  EXPECT_TRUE(expr->result_type()->As<type::Vector>()->type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, Intrinsic_Select_TooFewParams) {
@@ -1630,12 +1572,9 @@
   auto* der = create<ast::UnaryOpExpression>(op, Expr("ident"));
   EXPECT_TRUE(td()->DetermineResultType(der));
   ASSERT_NE(der->result_type(), nullptr);
-  ASSERT_TRUE(der->result_type()->Is<ast::type::Vector>());
-  EXPECT_TRUE(der->result_type()
-                  ->As<ast::type::Vector>()
-                  ->type()
-                  ->Is<ast::type::F32>());
-  EXPECT_EQ(der->result_type()->As<ast::type::Vector>()->size(), 4u);
+  ASSERT_TRUE(der->result_type()->Is<type::Vector>());
+  EXPECT_TRUE(der->result_type()->As<type::Vector>()->type()->Is<type::F32>());
+  EXPECT_EQ(der->result_type()->As<type::Vector>()->size(), 4u);
 }
 INSTANTIATE_TEST_SUITE_P(TypeDeterminerTest,
                          UnaryOpExpressionTest,
@@ -1804,7 +1743,7 @@
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
   EXPECT_TRUE(ident->result_type()->is_float_vector());
-  EXPECT_EQ(ident->result_type()->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_EQ(ident->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_P(ImportData_SingleParamTest, Error_Integer) {
@@ -1886,7 +1825,7 @@
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
   EXPECT_TRUE(ident->result_type()->is_float_vector());
-  EXPECT_EQ(ident->result_type()->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_EQ(ident->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_P(ImportData_SingleParam_FloatOrInt_Test, Sint_Scalar) {
@@ -1897,7 +1836,7 @@
 
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
-  EXPECT_TRUE(ident->result_type()->Is<ast::type::I32>());
+  EXPECT_TRUE(ident->result_type()->Is<type::I32>());
 }
 
 TEST_P(ImportData_SingleParam_FloatOrInt_Test, Sint_Vector) {
@@ -1917,7 +1856,7 @@
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
   EXPECT_TRUE(ident->result_type()->is_signed_integer_vector());
-  EXPECT_EQ(ident->result_type()->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_EQ(ident->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_P(ImportData_SingleParam_FloatOrInt_Test, Uint_Scalar) {
@@ -1931,7 +1870,7 @@
 
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
-  EXPECT_TRUE(ident->result_type()->Is<ast::type::U32>());
+  EXPECT_TRUE(ident->result_type()->Is<type::U32>());
 }
 
 TEST_P(ImportData_SingleParam_FloatOrInt_Test, Uint_Vector) {
@@ -1943,7 +1882,7 @@
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
   EXPECT_TRUE(ident->result_type()->is_unsigned_integer_vector());
-  EXPECT_EQ(ident->result_type()->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_EQ(ident->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_P(ImportData_SingleParam_FloatOrInt_Test, Error_Bool) {
@@ -2057,7 +1996,7 @@
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
   EXPECT_TRUE(ident->result_type()->is_float_vector());
-  EXPECT_EQ(ident->result_type()->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_EQ(ident->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_P(ImportData_TwoParamTest, Error_Integer) {
@@ -2148,7 +2087,7 @@
 
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
-  EXPECT_TRUE(ident->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ident->result_type()->Is<type::F32>());
 }
 
 TEST_F(TypeDeterminerTest, ImportData_Distance_Error_Integer) {
@@ -2208,7 +2147,7 @@
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
   EXPECT_TRUE(ident->result_type()->is_float_vector());
-  EXPECT_EQ(ident->result_type()->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_EQ(ident->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_F(TypeDeterminerTest, ImportData_Cross_Error_Scalar) {
@@ -2274,7 +2213,7 @@
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
   EXPECT_TRUE(ident->result_type()->is_float_vector());
-  EXPECT_EQ(ident->result_type()->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_EQ(ident->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_P(ImportData_ThreeParamTest, Error_Integer) {
@@ -2381,7 +2320,7 @@
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
   EXPECT_TRUE(ident->result_type()->is_float_vector());
-  EXPECT_EQ(ident->result_type()->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_EQ(ident->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_P(ImportData_ThreeParam_FloatOrInt_Test, Sint_Scalar) {
@@ -2392,7 +2331,7 @@
 
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
-  EXPECT_TRUE(ident->result_type()->Is<ast::type::I32>());
+  EXPECT_TRUE(ident->result_type()->Is<type::I32>());
 }
 
 TEST_P(ImportData_ThreeParam_FloatOrInt_Test, Sint_Vector) {
@@ -2405,7 +2344,7 @@
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
   EXPECT_TRUE(ident->result_type()->is_signed_integer_vector());
-  EXPECT_EQ(ident->result_type()->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_EQ(ident->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_P(ImportData_ThreeParam_FloatOrInt_Test, Uint_Scalar) {
@@ -2416,7 +2355,7 @@
 
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
-  EXPECT_TRUE(ident->result_type()->Is<ast::type::U32>());
+  EXPECT_TRUE(ident->result_type()->Is<type::U32>());
 }
 
 TEST_P(ImportData_ThreeParam_FloatOrInt_Test, Uint_Vector) {
@@ -2429,7 +2368,7 @@
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
   EXPECT_TRUE(ident->result_type()->is_unsigned_integer_vector());
-  EXPECT_EQ(ident->result_type()->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_EQ(ident->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_P(ImportData_ThreeParam_FloatOrInt_Test, Error_Bool) {
@@ -2531,7 +2470,7 @@
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
   EXPECT_TRUE(ident->result_type()->is_signed_integer_vector());
-  EXPECT_EQ(ident->result_type()->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_EQ(ident->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_P(ImportData_Int_SingleParamTest, Error_Float) {
@@ -2582,7 +2521,7 @@
 
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
-  EXPECT_TRUE(ident->result_type()->Is<ast::type::I32>());
+  EXPECT_TRUE(ident->result_type()->Is<type::I32>());
 }
 
 TEST_P(ImportData_FloatOrInt_TwoParamTest, Scalar_Unsigned) {
@@ -2593,7 +2532,7 @@
 
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
-  EXPECT_TRUE(ident->result_type()->Is<ast::type::U32>());
+  EXPECT_TRUE(ident->result_type()->Is<type::U32>());
 }
 
 TEST_P(ImportData_FloatOrInt_TwoParamTest, Scalar_Float) {
@@ -2604,7 +2543,7 @@
 
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
-  EXPECT_TRUE(ident->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ident->result_type()->Is<type::F32>());
 }
 
 TEST_P(ImportData_FloatOrInt_TwoParamTest, Vector_Signed) {
@@ -2616,7 +2555,7 @@
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
   EXPECT_TRUE(ident->result_type()->is_signed_integer_vector());
-  EXPECT_EQ(ident->result_type()->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_EQ(ident->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_P(ImportData_FloatOrInt_TwoParamTest, Vector_Unsigned) {
@@ -2628,7 +2567,7 @@
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
   EXPECT_TRUE(ident->result_type()->is_unsigned_integer_vector());
-  EXPECT_EQ(ident->result_type()->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_EQ(ident->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_P(ImportData_FloatOrInt_TwoParamTest, Vector_Float) {
@@ -2640,7 +2579,7 @@
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
   EXPECT_TRUE(ident->result_type()->is_float_vector());
-  EXPECT_EQ(ident->result_type()->As<ast::type::Vector>()->size(), 3u);
+  EXPECT_EQ(ident->result_type()->As<type::Vector>()->size(), 3u);
 }
 
 TEST_P(ImportData_FloatOrInt_TwoParamTest, Error_Bool) {
@@ -2722,7 +2661,7 @@
 
   EXPECT_TRUE(td()->DetermineResultType(call)) << td()->error();
   ASSERT_NE(ident->result_type(), nullptr);
-  EXPECT_TRUE(ident->result_type()->Is<ast::type::F32>());
+  EXPECT_TRUE(ident->result_type()->Is<type::F32>());
 }
 
 using ImportData_Matrix_OneParam_Test =
@@ -3190,18 +3129,18 @@
     switch (param.texture_dimension) {
       default:
         FAIL() << "invalid texture dimensions: " << param.texture_dimension;
-      case ast::type::TextureDimension::k1d:
-      case ast::type::TextureDimension::k1dArray:
+      case type::TextureDimension::k1d:
+      case type::TextureDimension::k1dArray:
         EXPECT_EQ(call->result_type()->type_name(), ty.i32->type_name());
         break;
-      case ast::type::TextureDimension::k2d:
-      case ast::type::TextureDimension::k2dArray:
+      case type::TextureDimension::k2d:
+      case type::TextureDimension::k2dArray:
         EXPECT_EQ(call->result_type()->type_name(),
                   ty.vec2<i32>()->type_name());
         break;
-      case ast::type::TextureDimension::k3d:
-      case ast::type::TextureDimension::kCube:
-      case ast::type::TextureDimension::kCubeArray:
+      case type::TextureDimension::k3d:
+      case type::TextureDimension::kCube:
+      case type::TextureDimension::kCubeArray:
         EXPECT_EQ(call->result_type()->type_name(),
                   ty.vec3<i32>()->type_name());
         break;
@@ -3220,9 +3159,8 @@
       case ast::intrinsic::test::TextureKind::kMultisampled:
       case ast::intrinsic::test::TextureKind::kStorage: {
         auto* datatype = param.resultVectorComponentType(this);
-        ASSERT_TRUE(call->result_type()->Is<ast::type::Vector>());
-        EXPECT_EQ(call->result_type()->As<ast::type::Vector>()->type(),
-                  datatype);
+        ASSERT_TRUE(call->result_type()->Is<type::Vector>());
+        EXPECT_EQ(call->result_type()->As<type::Vector>()->type(), datatype);
         break;
       }
       case ast::intrinsic::test::TextureKind::kDepth: {
diff --git a/src/validator/validator_control_block_test.cc b/src/validator/validator_control_block_test.cc
index 35b97a2..005abe3 100644
--- a/src/validator/validator_control_block_test.cc
+++ b/src/validator/validator_control_block_test.cc
@@ -20,13 +20,13 @@
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/u32_type.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/alias_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/u32_type.h"
 #include "src/type_determiner.h"
 #include "src/validator/validator_impl.h"
 #include "src/validator/validator_test_helper.h"
diff --git a/src/validator/validator_function_test.cc b/src/validator/validator_function_test.cc
index 905d7b3..c5379ba 100644
--- a/src/validator/validator_function_test.cc
+++ b/src/validator/validator_function_test.cc
@@ -20,11 +20,11 @@
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/void_type.h"
 #include "src/type_determiner.h"
 #include "src/validator/validator_impl.h"
 #include "src/validator/validator_test_helper.h"
diff --git a/src/validator/validator_impl.cc b/src/validator/validator_impl.cc
index 15dfbbd..c673040 100644
--- a/src/validator/validator_impl.cc
+++ b/src/validator/validator_impl.cc
@@ -27,16 +27,16 @@
 #include "src/ast/stage_decoration.h"
 #include "src/ast/struct.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/array_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 
 namespace tint {
 
@@ -83,11 +83,11 @@
 }
 
 bool ValidatorImpl::ValidateConstructedTypes(
-    const std::vector<ast::type::Type*>& constructed_types) {
+    const std::vector<type::Type*>& constructed_types) {
   for (auto* const ct : constructed_types) {
-    if (auto* st = ct->As<ast::type::Struct>()) {
+    if (auto* st = ct->As<type::Struct>()) {
       for (auto* member : st->impl()->members()) {
-        if (auto* r = member->type()->UnwrapAll()->As<ast::type::Array>()) {
+        if (auto* r = member->type()->UnwrapAll()->As<type::Array>()) {
           if (r->IsRuntimeArray()) {
             if (member != st->impl()->members().back()) {
               add_error(member->source(), "v-0015",
@@ -167,7 +167,7 @@
         return false;
       }
 
-      if (!func->return_type()->Is<ast::type::Void>()) {
+      if (!func->return_type()->Is<type::Void>()) {
         add_error(func->source(), "v-0024",
                   "Entry point function must return void: '" +
                       module_.SymbolToName(func->symbol()) + "'");
@@ -209,7 +209,7 @@
   }
   variable_stack_.pop_scope();
 
-  if (!current_function_->return_type()->Is<ast::type::Void>()) {
+  if (!current_function_->return_type()->Is<type::Void>()) {
     if (!func->get_last_statement() ||
         !func->get_last_statement()->Is<ast::ReturnStatement>()) {
       add_error(func->source(), "v-0002",
@@ -221,7 +221,7 @@
 }
 
 bool ValidatorImpl::ValidateParameter(const ast::Variable* param) {
-  if (auto* r = param->type()->UnwrapAll()->As<ast::type::Array>()) {
+  if (auto* r = param->type()->UnwrapAll()->As<type::Array>()) {
     if (r->IsRuntimeArray()) {
       add_error(
           param->source(), "v-0015",
@@ -235,9 +235,9 @@
 bool ValidatorImpl::ValidateReturnStatement(const ast::ReturnStatement* ret) {
   // TODO(sarahM0): update this when this issue resolves:
   // https://github.com/gpuweb/gpuweb/issues/996
-  ast::type::Type* func_type = current_function_->return_type();
+  type::Type* func_type = current_function_->return_type();
 
-  ast::type::Void void_type;
+  type::Void void_type;
   auto* ret_type =
       ret->has_value() ? ret->value()->result_type()->UnwrapAll() : &void_type;
 
@@ -283,8 +283,7 @@
   //    storable.
   //  - types match or the RHS can be dereferenced to equal the LHS type.
   variable_stack_.set(symbol, decl->variable());
-  if (auto* arr =
-          decl->variable()->type()->UnwrapAll()->As<ast::type::Array>()) {
+  if (auto* arr = decl->variable()->type()->UnwrapAll()->As<type::Array>()) {
     if (arr->IsRuntimeArray()) {
       add_error(
           decl->source(), "v-0015",
@@ -358,11 +357,11 @@
       }
 
       auto v =
-          static_cast<int32_t>(selector->type()->Is<ast::type::U32>()
+          static_cast<int32_t>(selector->type()->Is<type::U32>()
                                    ? selector->As<ast::UintLiteral>()->value()
                                    : selector->As<ast::SintLiteral>()->value());
       if (selector_set.count(v)) {
-        auto v_str = selector->type()->Is<ast::type::U32>()
+        auto v_str = selector->type()->Is<type::U32>()
                          ? selector->As<ast::UintLiteral>()->to_str()
                          : selector->As<ast::SintLiteral>()->to_str();
         add_error(case_stmt->source(), "v-0027",
@@ -485,7 +484,7 @@
     return false;
   }
   auto* lhs_result_type = lhs->result_type()->UnwrapIfNeeded();
-  if (auto* lhs_reference_type = As<ast::type::Pointer>(lhs_result_type)) {
+  if (auto* lhs_reference_type = As<type::Pointer>(lhs_result_type)) {
     auto* lhs_store_type = lhs_reference_type->type()->UnwrapIfNeeded();
     if (lhs_store_type != rhs_result_type) {
       add_error(assign->source(), "v-000x",
@@ -534,18 +533,18 @@
   return true;
 }
 
-bool ValidatorImpl::IsStorable(ast::type::Type* type) {
+bool ValidatorImpl::IsStorable(type::Type* type) {
   if (type == nullptr) {
     return false;
   }
-  if (type->is_scalar() || type->Is<ast::type::Vector>() ||
-      type->Is<ast::type::Matrix>()) {
+  if (type->is_scalar() || type->Is<type::Vector>() ||
+      type->Is<type::Matrix>()) {
     return true;
   }
-  if (ast::type::Array* array_type = type->As<ast::type::Array>()) {
+  if (type::Array* array_type = type->As<type::Array>()) {
     return IsStorable(array_type->type());
   }
-  if (ast::type::Struct* struct_type = type->As<ast::type::Struct>()) {
+  if (type::Struct* struct_type = type->As<type::Struct>()) {
     for (const auto* member : struct_type->impl()->members()) {
       if (!IsStorable(member->type())) {
         return false;
@@ -553,7 +552,7 @@
     }
     return true;
   }
-  if (ast::type::Alias* alias_type = type->As<ast::type::Alias>()) {
+  if (type::Alias* alias_type = type->As<type::Alias>()) {
     return IsStorable(alias_type->type());
   }
   return false;
diff --git a/src/validator/validator_impl.h b/src/validator/validator_impl.h
index f0a1b5d..58aa2e1 100644
--- a/src/validator/validator_impl.h
+++ b/src/validator/validator_impl.h
@@ -144,15 +144,16 @@
   /// @param constructed_types the types to check
   /// @returns true if the valdiation was successful
   bool ValidateConstructedTypes(
-      const std::vector<ast::type::Type*>& constructed_types);
+      const std::vector<type::Type*>& constructed_types);
 
   /// Returns true if the given type is storable. This uses and
   /// updates `storable_` and `not_storable_`.
   /// @param type the given type
   /// @returns true if the given type is storable.
-  bool IsStorable(ast::type::Type* type);
+  bool IsStorable(type::Type* type);
 
   /// Testing method to inserting a given variable into the current scope.
+  /// @param var the variable to register
   void RegisterVariableForTesting(ast::Variable* var) {
     variable_stack_.set(var->symbol(), var);
   }
diff --git a/src/validator/validator_test.cc b/src/validator/validator_test.cc
index de38988..7973dc7 100644
--- a/src/validator/validator_test.cc
+++ b/src/validator/validator_test.cc
@@ -38,19 +38,19 @@
 #include "src/ast/struct.h"
 #include "src/ast/struct_member.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/type_determiner.h"
 #include "src/validator/validator_impl.h"
 #include "src/validator/validator_test_helper.h"
diff --git a/src/validator/validator_test_helper.h b/src/validator/validator_test_helper.h
index a7f4374..305f1a4 100644
--- a/src/validator/validator_test_helper.h
+++ b/src/validator/validator_test_helper.h
@@ -19,7 +19,7 @@
 #include <utility>
 
 #include "src/ast/builder.h"
-#include "src/ast/type/void_type.h"
+#include "src/type/void_type.h"
 #include "src/type_determiner.h"
 #include "src/validator/validator_impl.h"
 
diff --git a/src/validator/validator_type_test.cc b/src/validator/validator_type_test.cc
index 91be119..e199785 100644
--- a/src/validator/validator_type_test.cc
+++ b/src/validator/validator_type_test.cc
@@ -18,13 +18,13 @@
 #include "src/ast/struct_block_decoration.h"
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_decoration.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/struct_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/struct_type.h"
 #include "src/validator/validator_impl.h"
 #include "src/validator/validator_test_helper.h"
 
diff --git a/src/writer/append_vector.cc b/src/writer/append_vector.cc
index 6a629b2..4873723 100644
--- a/src/writer/append_vector.cc
+++ b/src/writer/append_vector.cc
@@ -17,8 +17,8 @@
 #include <utility>
 
 #include "src/ast/expression.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
+#include "src/type/vector_type.h"
 
 namespace tint {
 namespace writer {
@@ -27,7 +27,7 @@
 
 ast::TypeConstructorExpression* AsVectorConstructor(ast::Expression* expr) {
   if (auto* constructor = expr->As<ast::TypeConstructorExpression>()) {
-    if (constructor->type()->Is<ast::type::Vector>()) {
+    if (constructor->type()->Is<type::Vector>()) {
       return constructor;
     }
   }
@@ -41,8 +41,8 @@
     ast::Expression* scalar,
     std::function<bool(ast::TypeConstructorExpression*)> callback) {
   uint32_t packed_size;
-  ast::type::Type* packed_el_ty;  // Currently must be f32.
-  if (auto* vec = vector->result_type()->As<ast::type::Vector>()) {
+  type::Type* packed_el_ty;  // Currently must be f32.
+  if (auto* vec = vector->result_type()->As<type::Vector>()) {
     packed_size = vec->size() + 1;
     packed_el_ty = vec->type();
   } else {
@@ -58,7 +58,7 @@
   ast::TypeConstructorExpression scalar_cast(Source{}, packed_el_ty, {scalar});
   scalar_cast.set_result_type(packed_el_ty);
 
-  ast::type::Vector packed_ty(packed_el_ty, packed_size);
+  type::Vector packed_ty(packed_el_ty, packed_size);
 
   // If the coordinates are already passed in a vector constructor, extract
   // the elements into the new vector instead of nesting a vector-in-vector.
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index e3e53ad..c30a220 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -39,25 +39,25 @@
 #include "src/ast/sint_literal.h"
 #include "src/ast/struct.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/access_control_type.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/writer/append_vector.h"
 #include "src/writer/float_to_string.h"
 
@@ -97,27 +97,26 @@
   return 0;
 }
 
-const char* image_format_to_rwtexture_type(
-    ast::type::ImageFormat image_format) {
+const char* image_format_to_rwtexture_type(type::ImageFormat image_format) {
   switch (image_format) {
-    case ast::type::ImageFormat::kRgba8Unorm:
-    case ast::type::ImageFormat::kRgba8Snorm:
-    case ast::type::ImageFormat::kRgba16Float:
-    case ast::type::ImageFormat::kR32Float:
-    case ast::type::ImageFormat::kRg32Float:
-    case ast::type::ImageFormat::kRgba32Float:
+    case type::ImageFormat::kRgba8Unorm:
+    case type::ImageFormat::kRgba8Snorm:
+    case type::ImageFormat::kRgba16Float:
+    case type::ImageFormat::kR32Float:
+    case type::ImageFormat::kRg32Float:
+    case type::ImageFormat::kRgba32Float:
       return "float4";
-    case ast::type::ImageFormat::kRgba8Uint:
-    case ast::type::ImageFormat::kRgba16Uint:
-    case ast::type::ImageFormat::kR32Uint:
-    case ast::type::ImageFormat::kRg32Uint:
-    case ast::type::ImageFormat::kRgba32Uint:
+    case type::ImageFormat::kRgba8Uint:
+    case type::ImageFormat::kRgba16Uint:
+    case type::ImageFormat::kR32Uint:
+    case type::ImageFormat::kRg32Uint:
+    case type::ImageFormat::kRgba32Uint:
       return "uint4";
-    case ast::type::ImageFormat::kRgba8Sint:
-    case ast::type::ImageFormat::kRgba16Sint:
-    case ast::type::ImageFormat::kR32Sint:
-    case ast::type::ImageFormat::kRg32Sint:
-    case ast::type::ImageFormat::kRgba32Sint:
+    case type::ImageFormat::kRgba8Sint:
+    case type::ImageFormat::kRgba16Sint:
+    case type::ImageFormat::kR32Sint:
+    case type::ImageFormat::kRg32Sint:
+    case type::ImageFormat::kRgba32Sint:
       return "int4";
     default:
       return nullptr;
@@ -226,13 +225,13 @@
 }
 
 bool GeneratorImpl::EmitConstructedType(std::ostream& out,
-                                        const ast::type::Type* ty) {
+                                        const type::Type* ty) {
   make_indent(out);
 
-  if (auto* alias = ty->As<ast::type::Alias>()) {
+  if (auto* alias = ty->As<type::Alias>()) {
     // HLSL typedef is for intrinsic types only. For an alias'd struct,
     // generate a secondary struct with the new name.
-    if (auto* str = alias->type()->As<ast::type::Struct>()) {
+    if (auto* str = alias->type()->As<type::Struct>()) {
       if (!EmitStructType(out, str, module_->SymbolToName(alias->symbol()))) {
         return false;
       }
@@ -244,7 +243,7 @@
     }
     out << " " << namer_.NameFor(module_->SymbolToName(alias->symbol())) << ";"
         << std::endl;
-  } else if (auto* str = ty->As<ast::type::Struct>()) {
+  } else if (auto* str = ty->As<type::Struct>()) {
     if (!EmitStructType(out, str, module_->SymbolToName(str->symbol()))) {
       return false;
     }
@@ -385,12 +384,9 @@
   // Multiplying by a matrix requires the use of `mul` in order to get the
   // type of multiply we desire.
   if (expr->op() == ast::BinaryOp::kMultiply &&
-      ((lhs_type->Is<ast::type::Vector>() &&
-        rhs_type->Is<ast::type::Matrix>()) ||
-       (lhs_type->Is<ast::type::Matrix>() &&
-        rhs_type->Is<ast::type::Vector>()) ||
-       (lhs_type->Is<ast::type::Matrix>() &&
-        rhs_type->Is<ast::type::Matrix>()))) {
+      ((lhs_type->Is<type::Vector>() && rhs_type->Is<type::Matrix>()) ||
+       (lhs_type->Is<type::Matrix>() && rhs_type->Is<type::Vector>()) ||
+       (lhs_type->Is<type::Matrix>() && rhs_type->Is<type::Matrix>()))) {
     out << "mul(";
     if (!EmitExpression(pre, out, expr->lhs())) {
       return false;
@@ -692,8 +688,7 @@
   auto const kNotUsed = ast::intrinsic::TextureSignature::Parameters::kNotUsed;
 
   auto* texture = params[pidx.texture];
-  auto* texture_type =
-      texture->result_type()->UnwrapAll()->As<ast::type::Texture>();
+  auto* texture_type = texture->result_type()->UnwrapAll()->As<type::Texture>();
 
   switch (ident->intrinsic()) {
     case ast::Intrinsic::kTextureDimensions:
@@ -708,33 +703,33 @@
       switch (ident->intrinsic()) {
         case ast::Intrinsic::kTextureDimensions:
           switch (texture_type->dim()) {
-            case ast::type::TextureDimension::kNone:
+            case type::TextureDimension::kNone:
               error_ = "texture dimension is kNone";
               return false;
-            case ast::type::TextureDimension::k1d:
+            case type::TextureDimension::k1d:
               num_dimensions = 1;
               break;
-            case ast::type::TextureDimension::k1dArray:
+            case type::TextureDimension::k1dArray:
               num_dimensions = 2;
               swizzle = ".x";
               break;
-            case ast::type::TextureDimension::k2d:
+            case type::TextureDimension::k2d:
               num_dimensions = 2;
               break;
-            case ast::type::TextureDimension::k2dArray:
+            case type::TextureDimension::k2dArray:
               num_dimensions = 3;
               swizzle = ".xy";
               break;
-            case ast::type::TextureDimension::k3d:
+            case type::TextureDimension::k3d:
               num_dimensions = 3;
               break;
-            case ast::type::TextureDimension::kCube:
+            case type::TextureDimension::kCube:
               // width == height == depth for cubes
               // See https://github.com/gpuweb/gpuweb/issues/1345
               num_dimensions = 2;
               swizzle = ".xyy";  // [width, height, height]
               break;
-            case ast::type::TextureDimension::kCubeArray:
+            case type::TextureDimension::kCubeArray:
               // width == height == depth for cubes
               // See https://github.com/gpuweb/gpuweb/issues/1345
               num_dimensions = 3;
@@ -747,12 +742,12 @@
             default:
               error_ = "texture dimension is not arrayed";
               return false;
-            case ast::type::TextureDimension::k1dArray:
+            case type::TextureDimension::k1dArray:
               num_dimensions = 2;
               swizzle = ".y";
               break;
-            case ast::type::TextureDimension::k2dArray:
-            case ast::type::TextureDimension::kCubeArray:
+            case type::TextureDimension::k2dArray:
+            case type::TextureDimension::kCubeArray:
               num_dimensions = 3;
               swizzle = ".z";
               break;
@@ -764,14 +759,14 @@
             default:
               error_ = "texture dimension does not support mips";
               return false;
-            case ast::type::TextureDimension::k2d:
-            case ast::type::TextureDimension::kCube:
+            case type::TextureDimension::k2d:
+            case type::TextureDimension::kCube:
               num_dimensions = 3;
               swizzle = ".z";
               break;
-            case ast::type::TextureDimension::k2dArray:
-            case ast::type::TextureDimension::k3d:
-            case ast::type::TextureDimension::kCubeArray:
+            case type::TextureDimension::k2dArray:
+            case type::TextureDimension::k3d:
+            case type::TextureDimension::kCubeArray:
               num_dimensions = 4;
               swizzle = ".w";
               break;
@@ -782,11 +777,11 @@
             default:
               error_ = "texture dimension does not support multisampling";
               return false;
-            case ast::type::TextureDimension::k2d:
+            case type::TextureDimension::k2d:
               num_dimensions = 3;
               swizzle = ".z";
               break;
-            case ast::type::TextureDimension::k2dArray:
+            case type::TextureDimension::k2dArray:
               num_dimensions = 4;
               swizzle = ".w";
               break;
@@ -864,7 +859,7 @@
       break;
     case ast::Intrinsic::kTextureLoad:
       out << ".Load(";
-      if (!texture_type->Is<ast::type::StorageTexture>()) {
+      if (!texture_type->Is<type::StorageTexture>()) {
         pack_mip_in_coords = true;
       }
       break;
@@ -886,7 +881,7 @@
   auto* param_coords = params[pidx.coords];
 
   auto emit_vector_appended_with_i32_zero = [&](tint::ast::Expression* vector) {
-    auto* i32 = module_->create<ast::type::I32>();
+    auto* i32 = module_->create<type::I32>();
     ast::SintLiteral zero_lit(Source{}, i32, 0);
     ast::ScalarConstructorExpression zero(Source{}, &zero_lit);
     zero.set_result_type(i32);
@@ -1063,7 +1058,7 @@
 bool GeneratorImpl::EmitTypeConstructor(std::ostream& pre,
                                         std::ostream& out,
                                         ast::TypeConstructorExpression* expr) {
-  if (expr->type()->Is<ast::type::Array>()) {
+  if (expr->type()->Is<type::Array>()) {
     out << "{";
   } else {
     if (!EmitType(out, expr->type(), "")) {
@@ -1092,7 +1087,7 @@
     }
   }
 
-  if (expr->type()->Is<ast::type::Array>()) {
+  if (expr->type()->Is<type::Array>()) {
     out << "}";
   } else {
     out << ")";
@@ -1379,7 +1374,7 @@
       return false;
     }
     // Array name is output as part of the type
-    if (!v->type()->Is<ast::type::Array>()) {
+    if (!v->type()->Is<type::Array>()) {
       out << " " << module_->SymbolToName(v->symbol());
     }
   }
@@ -1447,7 +1442,7 @@
     emitted_globals.insert(var->symbol());
 
     auto* type = var->type()->UnwrapIfNeeded();
-    if (auto* strct = type->As<ast::type::Struct>()) {
+    if (auto* strct = type->As<type::Struct>()) {
       out << "ConstantBuffer<" << module_->SymbolToName(strct->symbol()) << "> "
           << module_->SymbolToName(var->symbol()) << " : register(b"
           << binding->value() << ");" << std::endl;
@@ -1490,7 +1485,7 @@
     }
     emitted_globals.insert(var->symbol());
 
-    auto* ac = var->type()->As<ast::type::AccessControl>();
+    auto* ac = var->type()->As<type::AccessControl>();
     if (ac == nullptr) {
       error_ = "access control type required for storage buffer";
       return false;
@@ -1712,18 +1707,18 @@
   return true;
 }
 
-bool GeneratorImpl::EmitZeroValue(std::ostream& out, ast::type::Type* type) {
-  if (type->Is<ast::type::Bool>()) {
+bool GeneratorImpl::EmitZeroValue(std::ostream& out, type::Type* type) {
+  if (type->Is<type::Bool>()) {
     out << "false";
-  } else if (type->Is<ast::type::F32>()) {
+  } else if (type->Is<type::F32>()) {
     out << "0.0f";
-  } else if (type->Is<ast::type::I32>()) {
+  } else if (type->Is<type::I32>()) {
     out << "0";
-  } else if (type->Is<ast::type::U32>()) {
+  } else if (type->Is<type::U32>()) {
     out << "0u";
-  } else if (auto* vec = type->As<ast::type::Vector>()) {
+  } else if (auto* vec = type->As<type::Vector>()) {
     return EmitZeroValue(out, vec->type());
-  } else if (auto* mat = type->As<ast::type::Matrix>()) {
+  } else if (auto* mat = type->As<type::Matrix>()) {
     for (uint32_t i = 0; i < (mat->rows() * mat->columns()); i++) {
       if (i != 0) {
         out << ", ";
@@ -1851,7 +1846,7 @@
     first = false;
     if (auto* mem = expr->As<ast::MemberAccessorExpression>()) {
       auto* res_type = mem->structure()->result_type()->UnwrapAll();
-      if (auto* str = res_type->As<ast::type::Struct>()) {
+      if (auto* str = res_type->As<type::Struct>()) {
         auto* str_type = str->impl();
         auto* str_member = str_type->get_member(mem->member()->symbol());
 
@@ -1861,7 +1856,7 @@
         }
         out << str_member->offset();
 
-      } else if (res_type->Is<ast::type::Vector>()) {
+      } else if (res_type->Is<type::Vector>()) {
         // TODO(dsinclair): Swizzle stuff
         //
         // This must be a single element swizzle if we've got a vector at this
@@ -1891,14 +1886,14 @@
       auto* ary_type = ary->array()->result_type()->UnwrapAll();
 
       out << "(";
-      if (auto* arr = ary_type->As<ast::type::Array>()) {
+      if (auto* arr = ary_type->As<type::Array>()) {
         out << arr->array_stride();
-      } else if (ary_type->Is<ast::type::Vector>()) {
+      } else if (ary_type->Is<type::Vector>()) {
         // TODO(dsinclair): This is a hack. Our vectors can only be f32, i32
         // or u32 which are all 4 bytes. When we get f16 or other types we'll
         // have to ask the type for the byte size.
         out << "4";
-      } else if (auto* mat = ary_type->As<ast::type::Matrix>()) {
+      } else if (auto* mat = ary_type->As<type::Matrix>()) {
         if (mat->columns() == 2) {
           out << "8";
         } else {
@@ -1939,16 +1934,16 @@
   bool is_store = rhs != nullptr;
 
   std::string access_method = is_store ? "Store" : "Load";
-  if (auto* vec = result_type->As<ast::type::Vector>()) {
+  if (auto* vec = result_type->As<type::Vector>()) {
     access_method += std::to_string(vec->size());
-  } else if (auto* mat = result_type->As<ast::type::Matrix>()) {
+  } else if (auto* mat = result_type->As<type::Matrix>()) {
     access_method += std::to_string(mat->rows());
   }
 
   // If we aren't storing then we need to put in the outer cast.
   if (!is_store) {
     if (result_type->is_float_scalar_or_vector() ||
-        result_type->Is<ast::type::Matrix>()) {
+        result_type->Is<type::Matrix>()) {
       out << "asfloat(";
     } else if (result_type->is_signed_scalar_or_vector()) {
       out << "asint(";
@@ -1968,7 +1963,7 @@
     return false;
   }
 
-  if (auto* mat = result_type->As<ast::type::Matrix>()) {
+  if (auto* mat = result_type->As<type::Matrix>()) {
     // TODO(dsinclair): This is assuming 4 byte elements. Will need to be fixed
     // if we get matrixes of f16 or f64.
     uint32_t stride = mat->rows() == 2 ? 8 : 16;
@@ -2056,7 +2051,7 @@
   //
   // If the data is a multi-element swizzle then we will not load the swizzle
   // portion through the Load command.
-  if (data_type->Is<ast::type::Vector>() &&
+  if (data_type->Is<type::Vector>() &&
       module_->SymbolToName(expr->member()->symbol()).size() > 1) {
     return false;
   }
@@ -2200,20 +2195,20 @@
 }
 
 bool GeneratorImpl::EmitType(std::ostream& out,
-                             ast::type::Type* type,
+                             type::Type* type,
                              const std::string& name) {
   // HLSL doesn't have the read/write only markings so just unwrap the access
   // control type.
-  if (auto* ac = type->As<ast::type::AccessControl>()) {
+  if (auto* ac = type->As<type::AccessControl>()) {
     return EmitType(out, ac->type(), name);
   }
 
-  if (auto* alias = type->As<ast::type::Alias>()) {
+  if (auto* alias = type->As<type::Alias>()) {
     out << namer_.NameFor(module_->SymbolToName(alias->symbol()));
-  } else if (auto* ary = type->As<ast::type::Array>()) {
-    ast::type::Type* base_type = ary;
+  } else if (auto* ary = type->As<type::Array>()) {
+    type::Type* base_type = ary;
     std::vector<uint32_t> sizes;
-    while (auto* arr = base_type->As<ast::type::Array>()) {
+    while (auto* arr = base_type->As<type::Array>()) {
       if (arr->IsRuntimeArray()) {
         // TODO(dsinclair): Support runtime arrays
         // https://bugs.chromium.org/p/tint/issues/detail?id=185
@@ -2233,56 +2228,56 @@
     for (uint32_t size : sizes) {
       out << "[" << size << "]";
     }
-  } else if (type->Is<ast::type::Bool>()) {
+  } else if (type->Is<type::Bool>()) {
     out << "bool";
-  } else if (type->Is<ast::type::F32>()) {
+  } else if (type->Is<type::F32>()) {
     out << "float";
-  } else if (type->Is<ast::type::I32>()) {
+  } else if (type->Is<type::I32>()) {
     out << "int";
-  } else if (auto* mat = type->As<ast::type::Matrix>()) {
+  } else if (auto* mat = type->As<type::Matrix>()) {
     if (!EmitType(out, mat->type(), "")) {
       return false;
     }
     out << mat->rows() << "x" << mat->columns();
-  } else if (type->Is<ast::type::Pointer>()) {
+  } else if (type->Is<type::Pointer>()) {
     // TODO(dsinclair): What do we do with pointers in HLSL?
     // https://bugs.chromium.org/p/tint/issues/detail?id=183
     error_ = "pointers not supported in HLSL";
     return false;
-  } else if (auto* sampler = type->As<ast::type::Sampler>()) {
+  } else if (auto* sampler = type->As<type::Sampler>()) {
     out << "Sampler";
     if (sampler->IsComparison()) {
       out << "Comparison";
     }
     out << "State";
-  } else if (auto* str = type->As<ast::type::Struct>()) {
+  } else if (auto* str = type->As<type::Struct>()) {
     out << module_->SymbolToName(str->symbol());
-  } else if (auto* tex = type->As<ast::type::Texture>()) {
-    if (tex->Is<ast::type::StorageTexture>()) {
+  } else if (auto* tex = type->As<type::Texture>()) {
+    if (tex->Is<type::StorageTexture>()) {
       out << "RW";
     }
     out << "Texture";
 
     switch (tex->dim()) {
-      case ast::type::TextureDimension::k1d:
+      case type::TextureDimension::k1d:
         out << "1D";
         break;
-      case ast::type::TextureDimension::k1dArray:
+      case type::TextureDimension::k1dArray:
         out << "1DArray";
         break;
-      case ast::type::TextureDimension::k2d:
+      case type::TextureDimension::k2d:
         out << "2D";
         break;
-      case ast::type::TextureDimension::k2dArray:
+      case type::TextureDimension::k2dArray:
         out << "2DArray";
         break;
-      case ast::type::TextureDimension::k3d:
+      case type::TextureDimension::k3d:
         out << "3D";
         break;
-      case ast::type::TextureDimension::kCube:
+      case type::TextureDimension::kCube:
         out << "Cube";
         break;
-      case ast::type::TextureDimension::kCubeArray:
+      case type::TextureDimension::kCubeArray:
         out << "CubeArray";
         break;
       default:
@@ -2290,7 +2285,7 @@
         return false;
     }
 
-    if (auto* st = tex->As<ast::type::StorageTexture>()) {
+    if (auto* st = tex->As<type::StorageTexture>()) {
       auto* component = image_format_to_rwtexture_type(st->image_format());
       if (component == nullptr) {
         error_ = "Unsupported StorageTexture ImageFormat: " +
@@ -2299,15 +2294,15 @@
       }
       out << "<" << component << ">";
     }
-  } else if (type->Is<ast::type::U32>()) {
+  } else if (type->Is<type::U32>()) {
     out << "uint";
-  } else if (auto* vec = type->As<ast::type::Vector>()) {
+  } else if (auto* vec = type->As<type::Vector>()) {
     auto size = vec->size();
-    if (vec->type()->Is<ast::type::F32>() && size >= 1 && size <= 4) {
+    if (vec->type()->Is<type::F32>() && size >= 1 && size <= 4) {
       out << "float" << size;
-    } else if (vec->type()->Is<ast::type::I32>() && size >= 1 && size <= 4) {
+    } else if (vec->type()->Is<type::I32>() && size >= 1 && size <= 4) {
       out << "int" << size;
-    } else if (vec->type()->Is<ast::type::U32>() && size >= 1 && size <= 4) {
+    } else if (vec->type()->Is<type::U32>() && size >= 1 && size <= 4) {
       out << "uint" << size;
     } else {
       out << "vector<";
@@ -2316,7 +2311,7 @@
       }
       out << ", " << size << ">";
     }
-  } else if (type->Is<ast::type::Void>()) {
+  } else if (type->Is<type::Void>()) {
     out << "void";
   } else {
     error_ = "unknown type in EmitType";
@@ -2327,7 +2322,7 @@
 }
 
 bool GeneratorImpl::EmitStructType(std::ostream& out,
-                                   const ast::type::Struct* str,
+                                   const type::Struct* str,
                                    const std::string& name) {
   // TODO(dsinclair): Block decoration?
   // if (str->impl()->decoration() != ast::StructDecoration::kNone) {
@@ -2344,7 +2339,7 @@
       return false;
     }
     // Array member name will be output with the type
-    if (!mem->type()->Is<ast::type::Array>()) {
+    if (!mem->type()->Is<type::Array>()) {
       out << " " << namer_.NameFor(module_->SymbolToName(mem->symbol()));
     }
     out << ";" << std::endl;
@@ -2407,7 +2402,7 @@
   if (!EmitType(out, var->type(), module_->SymbolToName(var->symbol()))) {
     return false;
   }
-  if (!var->type()->Is<ast::type::Array>()) {
+  if (!var->type()->Is<type::Array>()) {
     out << " " << module_->SymbolToName(var->symbol());
   }
   out << constructor_out.str() << ";" << std::endl;
@@ -2464,7 +2459,7 @@
     if (!EmitType(out, var->type(), module_->SymbolToName(var->symbol()))) {
       return false;
     }
-    if (!var->type()->Is<ast::type::Array>()) {
+    if (!var->type()->Is<type::Array>()) {
       out << " " << module_->SymbolToName(var->symbol());
     }
 
diff --git a/src/writer/hlsl/generator_impl.h b/src/writer/hlsl/generator_impl.h
index 0044b02..433c3a1 100644
--- a/src/writer/hlsl/generator_impl.h
+++ b/src/writer/hlsl/generator_impl.h
@@ -38,10 +38,10 @@
 #include "src/ast/return_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/struct_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/scope_stack.h"
+#include "src/type/struct_type.h"
 #include "src/writer/hlsl/namer.h"
 
 namespace tint {
@@ -85,7 +85,7 @@
   /// @param out the output stream
   /// @param ty the constructed type to generate
   /// @returns true if the constructed type was emitted
-  bool EmitConstructedType(std::ostream& out, const ast::type::Type* ty);
+  bool EmitConstructedType(std::ostream& out, const type::Type* ty);
   /// Handles an array accessor expression
   /// @param pre the preamble for the expression stream
   /// @param out the output of the expression stream
@@ -290,16 +290,14 @@
   /// @param type the type to generate
   /// @param name the name of the variable, only used for array emission
   /// @returns true if the type is emitted
-  bool EmitType(std::ostream& out,
-                ast::type::Type* type,
-                const std::string& name);
+  bool EmitType(std::ostream& out, type::Type* type, const std::string& name);
   /// Handles generating a structure declaration
   /// @param out the output stream
   /// @param ty the struct to generate
   /// @param name the struct name
   /// @returns true if the struct is emitted
   bool EmitStructType(std::ostream& out,
-                      const ast::type::Struct* ty,
+                      const type::Struct* ty,
                       const std::string& name);
   /// Handles a unary op expression
   /// @param pre the preamble for the expression stream
@@ -313,7 +311,7 @@
   /// @param out the output stream
   /// @param type the type to emit the value for
   /// @returns true if the zero value was successfully emitted.
-  bool EmitZeroValue(std::ostream& out, ast::type::Type* type);
+  bool EmitZeroValue(std::ostream& out, type::Type* type);
   /// Handles generating a variable
   /// @param out the output stream
   /// @param var the variable to generate
diff --git a/src/writer/hlsl/generator_impl_alias_type_test.cc b/src/writer/hlsl/generator_impl_alias_type_test.cc
index 544f4ea..e04d641 100644
--- a/src/writer/hlsl/generator_impl_alias_type_test.cc
+++ b/src/writer/hlsl/generator_impl_alias_type_test.cc
@@ -16,7 +16,7 @@
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_decoration.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/struct_type.h"
+#include "src/type/struct_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_array_accessor_test.cc b/src/writer/hlsl/generator_impl_array_accessor_test.cc
index fc71b74..cb65569 100644
--- a/src/writer/hlsl/generator_impl_array_accessor_test.cc
+++ b/src/writer/hlsl/generator_impl_array_accessor_test.cc
@@ -19,7 +19,7 @@
 #include "src/ast/module.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_binary_test.cc b/src/writer/hlsl/generator_impl_binary_test.cc
index 457acde..3240c10 100644
--- a/src/writer/hlsl/generator_impl_binary_test.cc
+++ b/src/writer/hlsl/generator_impl_binary_test.cc
@@ -28,16 +28,16 @@
 #include "src/ast/return_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_bitcast_test.cc b/src/writer/hlsl/generator_impl_bitcast_test.cc
index c47df56..a6fc904 100644
--- a/src/writer/hlsl/generator_impl_bitcast_test.cc
+++ b/src/writer/hlsl/generator_impl_bitcast_test.cc
@@ -17,9 +17,9 @@
 #include "src/ast/bitcast_expression.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/module.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/u32_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/u32_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_call_test.cc b/src/writer/hlsl/generator_impl_call_test.cc
index c9b40b4..92b1905 100644
--- a/src/writer/hlsl/generator_impl_call_test.cc
+++ b/src/writer/hlsl/generator_impl_call_test.cc
@@ -19,7 +19,7 @@
 #include "src/ast/function.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/module.h"
-#include "src/ast/type/void_type.h"
+#include "src/type/void_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_case_test.cc b/src/writer/hlsl/generator_impl_case_test.cc
index 23a9a94..d6fd895 100644
--- a/src/writer/hlsl/generator_impl_case_test.cc
+++ b/src/writer/hlsl/generator_impl_case_test.cc
@@ -20,7 +20,7 @@
 #include "src/ast/identifier_expression.h"
 #include "src/ast/module.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_cast_test.cc b/src/writer/hlsl/generator_impl_cast_test.cc
index 6625755..6a8c533 100644
--- a/src/writer/hlsl/generator_impl_cast_test.cc
+++ b/src/writer/hlsl/generator_impl_cast_test.cc
@@ -16,9 +16,9 @@
 
 #include "src/ast/identifier_expression.h"
 #include "src/ast/module.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
+#include "src/type/f32_type.h"
+#include "src/type/vector_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_constructor_test.cc b/src/writer/hlsl/generator_impl_constructor_test.cc
index 55512a4..0eaeb36 100644
--- a/src/writer/hlsl/generator_impl_constructor_test.cc
+++ b/src/writer/hlsl/generator_impl_constructor_test.cc
@@ -17,15 +17,15 @@
 #include "src/ast/module.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_function_test.cc b/src/writer/hlsl/generator_impl_function_test.cc
index 70ce1b3..ee5e40b 100644
--- a/src/writer/hlsl/generator_impl_function_test.cc
+++ b/src/writer/hlsl/generator_impl_function_test.cc
@@ -32,16 +32,16 @@
 #include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
 #include "src/ast/workgroup_decoration.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/hlsl/test_helper.h"
 
@@ -380,7 +380,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  ast::type::AccessControl ac(ast::AccessControl::kReadWrite, s);
+  type::AccessControl ac(ast::AccessControl::kReadWrite, s);
 
   auto* coord_var = Var("coord", ast::StorageClass::kStorage, &ac, nullptr,
                         ast::VariableDecorationList{
@@ -426,7 +426,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  ast::type::AccessControl ac(ast::AccessControl::kReadOnly, s);
+  type::AccessControl ac(ast::AccessControl::kReadOnly, s);
 
   auto* coord_var = Var("coord", ast::StorageClass::kStorage, &ac, nullptr,
                         ast::VariableDecorationList{
@@ -473,7 +473,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  ast::type::AccessControl ac(ast::AccessControl::kReadWrite, s);
+  type::AccessControl ac(ast::AccessControl::kReadWrite, s);
 
   auto* coord_var = Var("coord", ast::StorageClass::kStorage, &ac, nullptr,
                         ast::VariableDecorationList{
@@ -773,7 +773,7 @@
 
 TEST_F(HlslGeneratorImplTest_Function,
        Emit_FunctionDecoration_Called_By_EntryPoint_With_StorageBuffer) {
-  ast::type::AccessControl ac(ast::AccessControl::kReadWrite, ty.vec4<f32>());
+  type::AccessControl ac(ast::AccessControl::kReadWrite, ty.vec4<f32>());
   auto* coord_var = Var("coord", ast::StorageClass::kStorage, &ac, nullptr,
                         ast::VariableDecorationList{
                             create<ast::BindingDecoration>(0),
@@ -982,7 +982,7 @@
       ast::StructDecorationList{create<ast::StructBlockDecoration>()});
 
   auto* s = ty.struct_("Data", str);
-  ast::type::AccessControl ac(ast::AccessControl::kReadWrite, s);
+  type::AccessControl ac(ast::AccessControl::kReadWrite, s);
 
   auto* data_var = Var("data", ast::StorageClass::kStorage, &ac, nullptr,
                        ast::VariableDecorationList{
diff --git a/src/writer/hlsl/generator_impl_import_test.cc b/src/writer/hlsl/generator_impl_import_test.cc
index 04a7785..8b68fcc 100644
--- a/src/writer/hlsl/generator_impl_import_test.cc
+++ b/src/writer/hlsl/generator_impl_import_test.cc
@@ -22,11 +22,11 @@
 #include "src/ast/module.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/vector_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/hlsl/test_helper.h"
 
diff --git a/src/writer/hlsl/generator_impl_intrinsic_test.cc b/src/writer/hlsl/generator_impl_intrinsic_test.cc
index 2658f74..79000d5 100644
--- a/src/writer/hlsl/generator_impl_intrinsic_test.cc
+++ b/src/writer/hlsl/generator_impl_intrinsic_test.cc
@@ -15,8 +15,8 @@
 #include "src/ast/call_expression.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/module.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/vector_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/hlsl/test_helper.h"
 
diff --git a/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc b/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc
index e0ec794..30fab52 100644
--- a/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc
+++ b/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc
@@ -17,9 +17,9 @@
 #include "gtest/gtest.h"
 #include "src/ast/builder.h"
 #include "src/ast/intrinsic_texture_helper_test.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/sampled_texture_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/sampled_texture_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/hlsl/generator_impl.h"
 
diff --git a/src/writer/hlsl/generator_impl_loop_test.cc b/src/writer/hlsl/generator_impl_loop_test.cc
index 4e7f017..100e21d 100644
--- a/src/writer/hlsl/generator_impl_loop_test.cc
+++ b/src/writer/hlsl/generator_impl_loop_test.cc
@@ -21,9 +21,9 @@
 #include "src/ast/loop_statement.h"
 #include "src/ast/module.h"
 #include "src/ast/return_statement.h"
-#include "src/ast/type/f32_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/f32_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_member_accessor_test.cc b/src/writer/hlsl/generator_impl_member_accessor_test.cc
index ee8345a..3121135 100644
--- a/src/writer/hlsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/hlsl/generator_impl_member_accessor_test.cc
@@ -25,10 +25,10 @@
 #include "src/ast/struct.h"
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/variable.h"
+#include "src/type/struct_type.h"
+#include "src/type/vector_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/hlsl/test_helper.h"
 
@@ -352,10 +352,10 @@
   // data.a[2];
   //
   // -> asint(data.Load((2 * 4));
-  ast::type::Array ary(ty.i32, 5,
-                       ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(4),
-                       });
+  type::Array ary(ty.i32, 5,
+                  ast::ArrayDecorationList{
+                      create<ast::StrideDecoration>(4),
+                  });
 
   auto* str = create<ast::Struct>(
       ast::StructMemberList{Member("a", &ary, {MemberOffset(0)})},
@@ -384,10 +384,10 @@
   // data.a[(2 + 4) - 3];
   //
   // -> asint(data.Load((4 * ((2 + 4) - 3)));
-  ast::type::Array ary(ty.i32, 5,
-                       ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(4),
-                       });
+  type::Array ary(ty.i32, 5,
+                  ast::ArrayDecorationList{
+                      create<ast::StrideDecoration>(4),
+                  });
 
   auto* str = create<ast::Struct>(
       ast::StructMemberList{Member("a", &ary, {MemberOffset(0)})},
@@ -453,10 +453,10 @@
   //
   // -> data.Store((2 * 4), asuint(2.3f));
 
-  ast::type::Array ary(ty.i32, 5,
-                       ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(4),
-                       });
+  type::Array ary(ty.i32, 5,
+                  ast::ArrayDecorationList{
+                      create<ast::StrideDecoration>(4),
+                  });
 
   auto* str = create<ast::Struct>(
       ast::StructMemberList{Member("a", &ary, {MemberOffset(0)})},
@@ -608,10 +608,10 @@
       ast::StructDecorationList{});
 
   auto* data = ty.struct_("Data", data_str);
-  ast::type::Array ary(data, 4,
-                       ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(32),
-                       });
+  type::Array ary(data, 4,
+                  ast::ArrayDecorationList{
+                      create<ast::StrideDecoration>(32),
+                  });
 
   auto* pre_str = create<ast::Struct>(
       ast::StructMemberList{Member("c", &ary, {MemberOffset(0)})},
@@ -657,8 +657,8 @@
       ast::StructDecorationList{});
 
   auto* data = ty.struct_("Data", data_str);
-  ast::type::Array ary(
-      data, 4, ast::ArrayDecorationList{create<ast::StrideDecoration>(32)});
+  type::Array ary(data, 4,
+                  ast::ArrayDecorationList{create<ast::StrideDecoration>(32)});
 
   auto* pre_str = create<ast::Struct>(
       ast::StructMemberList{Member("c", &ary, {MemberOffset(0)})},
@@ -706,10 +706,10 @@
       ast::StructDecorationList{});
 
   auto* data = ty.struct_("Data", data_str);
-  ast::type::Array ary(data, 4,
-                       ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(32),
-                       });
+  type::Array ary(data, 4,
+                  ast::ArrayDecorationList{
+                      create<ast::StrideDecoration>(32),
+                  });
 
   auto* pre_str = create<ast::Struct>(
       ast::StructMemberList{Member("c", &ary, {MemberOffset(0)})},
@@ -756,10 +756,10 @@
       ast::StructDecorationList{});
 
   auto* data = ty.struct_("Data", data_str);
-  ast::type::Array ary(data, 4,
-                       ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(32),
-                       });
+  type::Array ary(data, 4,
+                  ast::ArrayDecorationList{
+                      create<ast::StrideDecoration>(32),
+                  });
 
   auto* pre_str = create<ast::Struct>(
       ast::StructMemberList{Member("c", &ary, {MemberOffset(0)})},
@@ -806,10 +806,10 @@
       ast::StructDecorationList{});
 
   auto* data = ty.struct_("Data", data_str);
-  ast::type::Array ary(data, 4,
-                       ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(32),
-                       });
+  type::Array ary(data, 4,
+                  ast::ArrayDecorationList{
+                      create<ast::StrideDecoration>(32),
+                  });
 
   auto* pre_str = create<ast::Struct>(
       ast::StructMemberList{Member("c", &ary, {MemberOffset(0)})},
@@ -860,10 +860,10 @@
       ast::StructDecorationList{});
 
   auto* data = ty.struct_("Data", data_str);
-  ast::type::Array ary(data, 4,
-                       ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(32),
-                       });
+  type::Array ary(data, 4,
+                  ast::ArrayDecorationList{
+                      create<ast::StrideDecoration>(32),
+                  });
 
   auto* pre_str = create<ast::Struct>(
       ast::StructMemberList{Member("c", &ary, {MemberOffset(0)})},
diff --git a/src/writer/hlsl/generator_impl_module_constant_test.cc b/src/writer/hlsl/generator_impl_module_constant_test.cc
index 171942f..b8ec558 100644
--- a/src/writer/hlsl/generator_impl_module_constant_test.cc
+++ b/src/writer/hlsl/generator_impl_module_constant_test.cc
@@ -19,8 +19,8 @@
 #include "src/ast/float_literal.h"
 #include "src/ast/module.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/f32_type.h"
+#include "src/type/array_type.h"
+#include "src/type/f32_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/variable.h"
 #include "src/writer/hlsl/test_helper.h"
diff --git a/src/writer/hlsl/generator_impl_switch_test.cc b/src/writer/hlsl/generator_impl_switch_test.cc
index 9a73bce..17d8666 100644
--- a/src/writer/hlsl/generator_impl_switch_test.cc
+++ b/src/writer/hlsl/generator_impl_switch_test.cc
@@ -20,7 +20,7 @@
 #include "src/ast/module.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_test.cc b/src/writer/hlsl/generator_impl_test.cc
index 44be70a..27476ae 100644
--- a/src/writer/hlsl/generator_impl_test.cc
+++ b/src/writer/hlsl/generator_impl_test.cc
@@ -17,7 +17,7 @@
 #include "src/ast/function.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/module.h"
-#include "src/ast/type/void_type.h"
+#include "src/type/void_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_type_test.cc b/src/writer/hlsl/generator_impl_type_test.cc
index 9cf3c4f..2655b22 100644
--- a/src/writer/hlsl/generator_impl_type_test.cc
+++ b/src/writer/hlsl/generator_impl_type_test.cc
@@ -19,22 +19,22 @@
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_decoration.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
@@ -126,7 +126,7 @@
 
 // TODO(dsinclair): How to annotate as workgroup?
 TEST_F(HlslGeneratorImplTest_Type, DISABLED_EmitType_Pointer) {
-  ast::type::Pointer p(ty.f32, ast::StorageClass::kWorkgroup);
+  type::Pointer p(ty.f32, ast::StorageClass::kWorkgroup);
 
   ASSERT_TRUE(gen.EmitType(out, &p, "")) << gen.error();
   EXPECT_EQ(result(), "float*");
@@ -225,21 +225,21 @@
 }
 
 TEST_F(HlslGeneratorImplTest_Type, EmitSampler) {
-  ast::type::Sampler sampler(ast::type::SamplerKind::kSampler);
+  type::Sampler sampler(type::SamplerKind::kSampler);
 
   ASSERT_TRUE(gen.EmitType(out, &sampler, "")) << gen.error();
   EXPECT_EQ(result(), "SamplerState");
 }
 
 TEST_F(HlslGeneratorImplTest_Type, EmitSamplerComparison) {
-  ast::type::Sampler sampler(ast::type::SamplerKind::kComparisonSampler);
+  type::Sampler sampler(type::SamplerKind::kComparisonSampler);
 
   ASSERT_TRUE(gen.EmitType(out, &sampler, "")) << gen.error();
   EXPECT_EQ(result(), "SamplerComparisonState");
 }
 
 struct HlslDepthTextureData {
-  ast::type::TextureDimension dim;
+  type::TextureDimension dim;
   std::string result;
 };
 inline std::ostream& operator<<(std::ostream& out, HlslDepthTextureData data) {
@@ -250,7 +250,7 @@
 TEST_P(HlslDepthtexturesTest, Emit) {
   auto params = GetParam();
 
-  ast::type::DepthTexture s(params.dim);
+  type::DepthTexture s(params.dim);
 
   ASSERT_TRUE(gen.EmitType(out, &s, "")) << gen.error();
   EXPECT_EQ(result(), params.result);
@@ -259,15 +259,15 @@
     HlslGeneratorImplTest_Type,
     HlslDepthtexturesTest,
     testing::Values(
-        HlslDepthTextureData{ast::type::TextureDimension::k2d, "Texture2D"},
-        HlslDepthTextureData{ast::type::TextureDimension::k2dArray,
+        HlslDepthTextureData{type::TextureDimension::k2d, "Texture2D"},
+        HlslDepthTextureData{type::TextureDimension::k2dArray,
                              "Texture2DArray"},
-        HlslDepthTextureData{ast::type::TextureDimension::kCube, "TextureCube"},
-        HlslDepthTextureData{ast::type::TextureDimension::kCubeArray,
+        HlslDepthTextureData{type::TextureDimension::kCube, "TextureCube"},
+        HlslDepthTextureData{type::TextureDimension::kCubeArray,
                              "TextureCubeArray"}));
 
 struct HlslTextureData {
-  ast::type::TextureDimension dim;
+  type::TextureDimension dim;
   std::string result;
 };
 inline std::ostream& operator<<(std::ostream& out, HlslTextureData data) {
@@ -278,7 +278,7 @@
 TEST_P(HlslSampledtexturesTest, Emit) {
   auto params = GetParam();
 
-  ast::type::SampledTexture s(params.dim, ty.f32);
+  type::SampledTexture s(params.dim, ty.f32);
 
   ASSERT_TRUE(gen.EmitType(out, &s, "")) << gen.error();
   EXPECT_EQ(result(), params.result);
@@ -287,27 +287,25 @@
     HlslGeneratorImplTest_Type,
     HlslSampledtexturesTest,
     testing::Values(
-        HlslTextureData{ast::type::TextureDimension::k1d, "Texture1D"},
-        HlslTextureData{ast::type::TextureDimension::k1dArray,
-                        "Texture1DArray"},
-        HlslTextureData{ast::type::TextureDimension::k2d, "Texture2D"},
-        HlslTextureData{ast::type::TextureDimension::k2dArray,
-                        "Texture2DArray"},
-        HlslTextureData{ast::type::TextureDimension::k3d, "Texture3D"},
-        HlslTextureData{ast::type::TextureDimension::kCube, "TextureCube"},
-        HlslTextureData{ast::type::TextureDimension::kCubeArray,
+        HlslTextureData{type::TextureDimension::k1d, "Texture1D"},
+        HlslTextureData{type::TextureDimension::k1dArray, "Texture1DArray"},
+        HlslTextureData{type::TextureDimension::k2d, "Texture2D"},
+        HlslTextureData{type::TextureDimension::k2dArray, "Texture2DArray"},
+        HlslTextureData{type::TextureDimension::k3d, "Texture3D"},
+        HlslTextureData{type::TextureDimension::kCube, "TextureCube"},
+        HlslTextureData{type::TextureDimension::kCubeArray,
                         "TextureCubeArray"}));
 
 TEST_F(HlslGeneratorImplTest_Type, EmitMultisampledTexture) {
-  ast::type::MultisampledTexture s(ast::type::TextureDimension::k2d, ty.f32);
+  type::MultisampledTexture s(type::TextureDimension::k2d, ty.f32);
 
   ASSERT_TRUE(gen.EmitType(out, &s, "")) << gen.error();
   EXPECT_EQ(result(), "Texture2D");
 }
 
 struct HlslStorageTextureData {
-  ast::type::TextureDimension dim;
-  ast::type::ImageFormat imgfmt;
+  type::TextureDimension dim;
+  type::ImageFormat imgfmt;
   bool ro;
   std::string result;
 };
@@ -320,11 +318,10 @@
 TEST_P(HlslStoragetexturesTest, Emit) {
   auto params = GetParam();
 
-  ast::type::StorageTexture s(params.dim,
-                              params.imgfmt);
-  ast::type::AccessControl ac(params.ro ? ast::AccessControl::kReadOnly
-                                        : ast::AccessControl::kWriteOnly,
-                              &s);
+  type::StorageTexture s(params.dim, params.imgfmt);
+  type::AccessControl ac(params.ro ? ast::AccessControl::kReadOnly
+                                   : ast::AccessControl::kWriteOnly,
+                         &s);
 
   ASSERT_TRUE(gen.EmitType(out, &ac, "")) << gen.error();
   EXPECT_EQ(result(), params.result);
@@ -332,55 +329,54 @@
 INSTANTIATE_TEST_SUITE_P(
     HlslGeneratorImplTest_Type,
     HlslStoragetexturesTest,
-    testing::Values(
-        HlslStorageTextureData{ast::type::TextureDimension::k1d,
-                               ast::type::ImageFormat::kRgba8Unorm, true,
-                               "RWTexture1D<float4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k1dArray,
-                               ast::type::ImageFormat::kRgba8Snorm, true,
-                               "RWTexture1DArray<float4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k2d,
-                               ast::type::ImageFormat::kRgba16Float, true,
-                               "RWTexture2D<float4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k2dArray,
-                               ast::type::ImageFormat::kR32Float, true,
-                               "RWTexture2DArray<float4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k3d,
-                               ast::type::ImageFormat::kRg32Float, true,
-                               "RWTexture3D<float4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k1d,
-                               ast::type::ImageFormat::kRgba32Float, false,
-                               "RWTexture1D<float4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k1dArray,
-                               ast::type::ImageFormat::kRgba8Uint, false,
-                               "RWTexture1DArray<uint4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k2d,
-                               ast::type::ImageFormat::kRgba16Uint, false,
-                               "RWTexture2D<uint4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k2dArray,
-                               ast::type::ImageFormat::kR32Uint, false,
-                               "RWTexture2DArray<uint4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k3d,
-                               ast::type::ImageFormat::kRg32Uint, false,
-                               "RWTexture3D<uint4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k1d,
-                               ast::type::ImageFormat::kRgba32Uint, true,
-                               "RWTexture1D<uint4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k1dArray,
-                               ast::type::ImageFormat::kRgba8Sint, true,
-                               "RWTexture1DArray<int4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k2d,
-                               ast::type::ImageFormat::kRgba16Sint, true,
-                               "RWTexture2D<int4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k2dArray,
-                               ast::type::ImageFormat::kR32Sint, true,
-                               "RWTexture2DArray<int4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k3d,
-                               ast::type::ImageFormat::kRg32Sint, true,
-                               "RWTexture3D<int4>"},
-        HlslStorageTextureData{ast::type::TextureDimension::k1d,
-                               ast::type::ImageFormat::kRgba32Sint, false,
-                               "RWTexture1D<int4>"}));
+    testing::Values(HlslStorageTextureData{type::TextureDimension::k1d,
+                                           type::ImageFormat::kRgba8Unorm, true,
+                                           "RWTexture1D<float4>"},
+                    HlslStorageTextureData{type::TextureDimension::k1dArray,
+                                           type::ImageFormat::kRgba8Snorm, true,
+                                           "RWTexture1DArray<float4>"},
+                    HlslStorageTextureData{type::TextureDimension::k2d,
+                                           type::ImageFormat::kRgba16Float,
+                                           true, "RWTexture2D<float4>"},
+                    HlslStorageTextureData{type::TextureDimension::k2dArray,
+                                           type::ImageFormat::kR32Float, true,
+                                           "RWTexture2DArray<float4>"},
+                    HlslStorageTextureData{type::TextureDimension::k3d,
+                                           type::ImageFormat::kRg32Float, true,
+                                           "RWTexture3D<float4>"},
+                    HlslStorageTextureData{type::TextureDimension::k1d,
+                                           type::ImageFormat::kRgba32Float,
+                                           false, "RWTexture1D<float4>"},
+                    HlslStorageTextureData{type::TextureDimension::k1dArray,
+                                           type::ImageFormat::kRgba8Uint, false,
+                                           "RWTexture1DArray<uint4>"},
+                    HlslStorageTextureData{type::TextureDimension::k2d,
+                                           type::ImageFormat::kRgba16Uint,
+                                           false, "RWTexture2D<uint4>"},
+                    HlslStorageTextureData{type::TextureDimension::k2dArray,
+                                           type::ImageFormat::kR32Uint, false,
+                                           "RWTexture2DArray<uint4>"},
+                    HlslStorageTextureData{type::TextureDimension::k3d,
+                                           type::ImageFormat::kRg32Uint, false,
+                                           "RWTexture3D<uint4>"},
+                    HlslStorageTextureData{type::TextureDimension::k1d,
+                                           type::ImageFormat::kRgba32Uint, true,
+                                           "RWTexture1D<uint4>"},
+                    HlslStorageTextureData{type::TextureDimension::k1dArray,
+                                           type::ImageFormat::kRgba8Sint, true,
+                                           "RWTexture1DArray<int4>"},
+                    HlslStorageTextureData{type::TextureDimension::k2d,
+                                           type::ImageFormat::kRgba16Sint, true,
+                                           "RWTexture2D<int4>"},
+                    HlslStorageTextureData{type::TextureDimension::k2dArray,
+                                           type::ImageFormat::kR32Sint, true,
+                                           "RWTexture2DArray<int4>"},
+                    HlslStorageTextureData{type::TextureDimension::k3d,
+                                           type::ImageFormat::kRg32Sint, true,
+                                           "RWTexture3D<int4>"},
+                    HlslStorageTextureData{type::TextureDimension::k1d,
+                                           type::ImageFormat::kRgba32Sint,
+                                           false, "RWTexture1D<int4>"}));
 
 }  // namespace
 }  // namespace hlsl
diff --git a/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc b/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc
index 5d5eae9..10e62fe 100644
--- a/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc
@@ -17,12 +17,12 @@
 
 #include "src/ast/identifier_expression.h"
 #include "src/ast/module.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/array_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/vector_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index 1de2fb9..254ca89 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -44,27 +44,27 @@
 #include "src/ast/sint_literal.h"
 #include "src/ast/struct_member_offset_decoration.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/access_control_type.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/writer/float_to_string.h"
 
 namespace tint {
@@ -167,51 +167,50 @@
   return true;
 }
 
-uint32_t GeneratorImpl::calculate_largest_alignment(ast::type::Struct* type) {
-  auto* stct = type->As<ast::type::Struct>()->impl();
+uint32_t GeneratorImpl::calculate_largest_alignment(type::Struct* type) {
+  auto* stct = type->As<type::Struct>()->impl();
   uint32_t largest_alignment = 0;
   for (auto* mem : stct->members()) {
     auto align = calculate_alignment_size(mem->type());
     if (align == 0) {
       return 0;
     }
-    if (!mem->type()->Is<ast::type::Struct>()) {
+    if (!mem->type()->Is<type::Struct>()) {
       largest_alignment = std::max(largest_alignment, align);
     } else {
       largest_alignment = std::max(
           largest_alignment,
-          calculate_largest_alignment(mem->type()->As<ast::type::Struct>()));
+          calculate_largest_alignment(mem->type()->As<type::Struct>()));
     }
   }
   return largest_alignment;
 }
 
-uint32_t GeneratorImpl::calculate_alignment_size(ast::type::Type* type) {
-  if (auto* alias = type->As<ast::type::Alias>()) {
+uint32_t GeneratorImpl::calculate_alignment_size(type::Type* type) {
+  if (auto* alias = type->As<type::Alias>()) {
     return calculate_alignment_size(alias->type());
   }
-  if (auto* ary = type->As<ast::type::Array>()) {
+  if (auto* ary = type->As<type::Array>()) {
     // TODO(dsinclair): Handle array stride and adjust for alignment.
     uint32_t type_size = calculate_alignment_size(ary->type());
     return ary->size() * type_size;
   }
-  if (type->Is<ast::type::Bool>()) {
+  if (type->Is<type::Bool>()) {
     return 1;
   }
-  if (type->Is<ast::type::Pointer>()) {
+  if (type->Is<type::Pointer>()) {
     return 0;
   }
-  if (type->Is<ast::type::F32>() || type->Is<ast::type::I32>() ||
-      type->Is<ast::type::U32>()) {
+  if (type->Is<type::F32>() || type->Is<type::I32>() || type->Is<type::U32>()) {
     return 4;
   }
-  if (auto* mat = type->As<ast::type::Matrix>()) {
+  if (auto* mat = type->As<type::Matrix>()) {
     // TODO(dsinclair): Handle MatrixStride
     // https://github.com/gpuweb/gpuweb/issues/773
     uint32_t type_size = calculate_alignment_size(mat->type());
     return mat->rows() * mat->columns() * type_size;
   }
-  if (auto* stct_ty = type->As<ast::type::Struct>()) {
+  if (auto* stct_ty = type->As<type::Struct>()) {
     auto* stct = stct_ty->impl();
     uint32_t count = 0;
     uint32_t largest_alignment = 0;
@@ -226,7 +225,7 @@
       if (align == 0) {
         return 0;
       }
-      if (auto* str = mem->type()->As<ast::type::Struct>()) {
+      if (auto* str = mem->type()->As<type::Struct>()) {
         largest_alignment =
             std::max(largest_alignment, calculate_largest_alignment(str));
       } else {
@@ -241,7 +240,7 @@
     count = adjust_for_alignment(count, largest_alignment);
     return count;
   }
-  if (auto* vec = type->As<ast::type::Vector>()) {
+  if (auto* vec = type->As<type::Vector>()) {
     uint32_t type_size = calculate_alignment_size(vec->type());
     if (vec->size() == 2) {
       return 2 * type_size;
@@ -251,17 +250,17 @@
   return 0;
 }
 
-bool GeneratorImpl::EmitConstructedType(const ast::type::Type* ty) {
+bool GeneratorImpl::EmitConstructedType(const type::Type* ty) {
   make_indent();
 
-  if (auto* alias = ty->As<ast::type::Alias>()) {
+  if (auto* alias = ty->As<type::Alias>()) {
     out_ << "typedef ";
     if (!EmitType(alias->type(), "")) {
       return false;
     }
     out_ << " " << namer_.NameFor(module_->SymbolToName(alias->symbol())) << ";"
          << std::endl;
-  } else if (auto* str = ty->As<ast::type::Struct>()) {
+  } else if (auto* str = ty->As<type::Struct>()) {
     if (!EmitStructType(str)) {
       return false;
     }
@@ -611,31 +610,29 @@
   auto const kNotUsed = ast::intrinsic::TextureSignature::Parameters::kNotUsed;
 
   assert(pidx.texture != kNotUsed);
-  auto* texture_type = params[pidx.texture]
-                           ->result_type()
-                           ->UnwrapAll()
-                           ->As<ast::type::Texture>();
+  auto* texture_type =
+      params[pidx.texture]->result_type()->UnwrapAll()->As<type::Texture>();
 
   switch (ident->intrinsic()) {
     case ast::Intrinsic::kTextureDimensions: {
       std::vector<const char*> dims;
       switch (texture_type->dim()) {
-        case ast::type::TextureDimension::kNone:
+        case type::TextureDimension::kNone:
           error_ = "texture dimension is kNone";
           return false;
-        case ast::type::TextureDimension::k1d:
-        case ast::type::TextureDimension::k1dArray:
+        case type::TextureDimension::k1d:
+        case type::TextureDimension::k1dArray:
           dims = {"width"};
           break;
-        case ast::type::TextureDimension::k2d:
-        case ast::type::TextureDimension::k2dArray:
+        case type::TextureDimension::k2d:
+        case type::TextureDimension::k2dArray:
           dims = {"width", "height"};
           break;
-        case ast::type::TextureDimension::k3d:
+        case type::TextureDimension::k3d:
           dims = {"width", "height", "depth"};
           break;
-        case ast::type::TextureDimension::kCube:
-        case ast::type::TextureDimension::kCubeArray:
+        case type::TextureDimension::kCube:
+        case type::TextureDimension::kCubeArray:
           // width == height == depth for cubes
           // See https://github.com/gpuweb/gpuweb/issues/1345
           dims = {"width", "height", "height"};
@@ -768,20 +765,20 @@
     auto dim = params[pidx.texture]
                    ->result_type()
                    ->UnwrapPtrIfNeeded()
-                   ->As<ast::type::Texture>()
+                   ->As<type::Texture>()
                    ->dim();
     switch (dim) {
-      case ast::type::TextureDimension::k2d:
-      case ast::type::TextureDimension::k2dArray:
+      case type::TextureDimension::k2d:
+      case type::TextureDimension::k2dArray:
         maybe_write_comma();
         out_ << "gradient2d(";
         break;
-      case ast::type::TextureDimension::k3d:
+      case type::TextureDimension::k3d:
         maybe_write_comma();
         out_ << "gradient3d(";
         break;
-      case ast::type::TextureDimension::kCube:
-      case ast::type::TextureDimension::kCubeArray:
+      case type::TextureDimension::kCube:
+      case type::TextureDimension::kCubeArray:
         maybe_write_comma();
         out_ << "gradientcube(";
         break;
@@ -853,26 +850,26 @@
       out += module_->SymbolToName(ident->symbol());
       break;
     case ast::Intrinsic::kAbs:
-      if (ident->result_type()->Is<ast::type::F32>()) {
+      if (ident->result_type()->Is<type::F32>()) {
         out += "fabs";
-      } else if (ident->result_type()->Is<ast::type::U32>() ||
-                 ident->result_type()->Is<ast::type::I32>()) {
+      } else if (ident->result_type()->Is<type::U32>() ||
+                 ident->result_type()->Is<type::I32>()) {
         out += "abs";
       }
       break;
     case ast::Intrinsic::kMax:
-      if (ident->result_type()->Is<ast::type::F32>()) {
+      if (ident->result_type()->Is<type::F32>()) {
         out += "fmax";
-      } else if (ident->result_type()->Is<ast::type::U32>() ||
-                 ident->result_type()->Is<ast::type::I32>()) {
+      } else if (ident->result_type()->Is<type::U32>() ||
+                 ident->result_type()->Is<type::I32>()) {
         out += "max";
       }
       break;
     case ast::Intrinsic::kMin:
-      if (ident->result_type()->Is<ast::type::F32>()) {
+      if (ident->result_type()->Is<type::F32>()) {
         out += "fmin";
-      } else if (ident->result_type()->Is<ast::type::U32>() ||
-                 ident->result_type()->Is<ast::type::I32>()) {
+      } else if (ident->result_type()->Is<type::U32>() ||
+                 ident->result_type()->Is<type::I32>()) {
         out += "min";
       }
       break;
@@ -951,7 +948,7 @@
 }
 
 bool GeneratorImpl::EmitTypeConstructor(ast::TypeConstructorExpression* expr) {
-  if (expr->type()->Is<ast::type::Array>()) {
+  if (expr->type()->Is<type::Array>()) {
     out_ << "{";
   } else {
     if (!EmitType(expr->type(), "")) {
@@ -980,7 +977,7 @@
     }
   }
 
-  if (expr->type()->Is<ast::type::Array>()) {
+  if (expr->type()->Is<type::Array>()) {
     out_ << "}";
   } else {
     out_ << ")";
@@ -988,26 +985,26 @@
   return true;
 }
 
-bool GeneratorImpl::EmitZeroValue(ast::type::Type* type) {
-  if (type->Is<ast::type::Bool>()) {
+bool GeneratorImpl::EmitZeroValue(type::Type* type) {
+  if (type->Is<type::Bool>()) {
     out_ << "false";
-  } else if (type->Is<ast::type::F32>()) {
+  } else if (type->Is<type::F32>()) {
     out_ << "0.0f";
-  } else if (type->Is<ast::type::I32>()) {
+  } else if (type->Is<type::I32>()) {
     out_ << "0";
-  } else if (type->Is<ast::type::U32>()) {
+  } else if (type->Is<type::U32>()) {
     out_ << "0u";
-  } else if (auto* vec = type->As<ast::type::Vector>()) {
+  } else if (auto* vec = type->As<type::Vector>()) {
     return EmitZeroValue(vec->type());
-  } else if (auto* mat = type->As<ast::type::Matrix>()) {
+  } else if (auto* mat = type->As<type::Matrix>()) {
     return EmitZeroValue(mat->type());
-  } else if (auto* arr = type->As<ast::type::Array>()) {
+  } else if (auto* arr = type->As<type::Array>()) {
     out_ << "{";
     if (!EmitZeroValue(arr->type())) {
       return false;
     }
     out_ << "}";
-  } else if (type->As<ast::type::Struct>()) {
+  } else if (type->As<type::Struct>()) {
     out_ << "{}";
   } else {
     error_ = "Invalid type for zero emission: " + type->type_name();
@@ -1348,7 +1345,7 @@
     }
     first = false;
 
-    auto* ac = var->type()->As<ast::type::AccessControl>();
+    auto* ac = var->type()->As<type::AccessControl>();
     if (ac == nullptr) {
       error_ = "invalid type for storage buffer, expected access control";
       return false;
@@ -1374,7 +1371,7 @@
       return false;
     }
     // Array name is output as part of the type
-    if (!v->type()->Is<ast::type::Array>()) {
+    if (!v->type()->Is<type::Array>()) {
       out_ << " " << module_->SymbolToName(v->symbol());
     }
   }
@@ -1512,7 +1509,7 @@
     auto* binding = data.second.binding;
     // auto* set = data.second.set;
 
-    auto* ac = var->type()->As<ast::type::AccessControl>();
+    auto* ac = var->type()->As<type::AccessControl>();
     if (ac == nullptr) {
       error_ = "invalid type for storage buffer, expected access control";
       return false;
@@ -1864,9 +1861,9 @@
   return true;
 }
 
-bool GeneratorImpl::EmitType(ast::type::Type* type, const std::string& name) {
+bool GeneratorImpl::EmitType(type::Type* type, const std::string& name) {
   std::string access_str = "";
-  if (auto* ac = type->As<ast::type::AccessControl>()) {
+  if (auto* ac = type->As<type::AccessControl>()) {
     if (ac->access_control() == ast::AccessControl::kReadOnly) {
       access_str = "read";
     } else if (ac->access_control() == ast::AccessControl::kWriteOnly) {
@@ -1879,12 +1876,12 @@
     type = ac->type();
   }
 
-  if (auto* alias = type->As<ast::type::Alias>()) {
+  if (auto* alias = type->As<type::Alias>()) {
     out_ << namer_.NameFor(module_->SymbolToName(alias->symbol()));
-  } else if (auto* ary = type->As<ast::type::Array>()) {
-    ast::type::Type* base_type = ary;
+  } else if (auto* ary = type->As<type::Array>()) {
+    type::Type* base_type = ary;
     std::vector<uint32_t> sizes;
-    while (auto* arr = base_type->As<ast::type::Array>()) {
+    while (auto* arr = base_type->As<type::Array>()) {
       if (arr->IsRuntimeArray()) {
         sizes.push_back(1);
       } else {
@@ -1901,79 +1898,79 @@
     for (uint32_t size : sizes) {
       out_ << "[" << size << "]";
     }
-  } else if (type->Is<ast::type::Bool>()) {
+  } else if (type->Is<type::Bool>()) {
     out_ << "bool";
-  } else if (type->Is<ast::type::F32>()) {
+  } else if (type->Is<type::F32>()) {
     out_ << "float";
-  } else if (type->Is<ast::type::I32>()) {
+  } else if (type->Is<type::I32>()) {
     out_ << "int";
-  } else if (auto* mat = type->As<ast::type::Matrix>()) {
+  } else if (auto* mat = type->As<type::Matrix>()) {
     if (!EmitType(mat->type(), "")) {
       return false;
     }
     out_ << mat->columns() << "x" << mat->rows();
-  } else if (auto* ptr = type->As<ast::type::Pointer>()) {
+  } else if (auto* ptr = type->As<type::Pointer>()) {
     // TODO(dsinclair): Storage class?
     if (!EmitType(ptr->type(), "")) {
       return false;
     }
     out_ << "*";
-  } else if (type->Is<ast::type::Sampler>()) {
+  } else if (type->Is<type::Sampler>()) {
     out_ << "sampler";
-  } else if (auto* str = type->As<ast::type::Struct>()) {
+  } else if (auto* str = type->As<type::Struct>()) {
     // The struct type emits as just the name. The declaration would be emitted
     // as part of emitting the constructed types.
     out_ << module_->SymbolToName(str->symbol());
-  } else if (auto* tex = type->As<ast::type::Texture>()) {
-    if (tex->Is<ast::type::DepthTexture>()) {
+  } else if (auto* tex = type->As<type::Texture>()) {
+    if (tex->Is<type::DepthTexture>()) {
       out_ << "depth";
     } else {
       out_ << "texture";
     }
 
     switch (tex->dim()) {
-      case ast::type::TextureDimension::k1d:
+      case type::TextureDimension::k1d:
         out_ << "1d";
         break;
-      case ast::type::TextureDimension::k1dArray:
+      case type::TextureDimension::k1dArray:
         out_ << "1d_array";
         break;
-      case ast::type::TextureDimension::k2d:
+      case type::TextureDimension::k2d:
         out_ << "2d";
         break;
-      case ast::type::TextureDimension::k2dArray:
+      case type::TextureDimension::k2dArray:
         out_ << "2d_array";
         break;
-      case ast::type::TextureDimension::k3d:
+      case type::TextureDimension::k3d:
         out_ << "3d";
         break;
-      case ast::type::TextureDimension::kCube:
+      case type::TextureDimension::kCube:
         out_ << "cube";
         break;
-      case ast::type::TextureDimension::kCubeArray:
+      case type::TextureDimension::kCubeArray:
         out_ << "cube_array";
         break;
       default:
         error_ = "Invalid texture dimensions";
         return false;
     }
-    if (tex->Is<ast::type::MultisampledTexture>()) {
+    if (tex->Is<type::MultisampledTexture>()) {
       out_ << "_ms";
     }
     out_ << "<";
-    if (tex->Is<ast::type::DepthTexture>()) {
+    if (tex->Is<type::DepthTexture>()) {
       out_ << "float, access::sample";
-    } else if (auto* storage = tex->As<ast::type::StorageTexture>()) {
+    } else if (auto* storage = tex->As<type::StorageTexture>()) {
       if (!EmitType(storage->type(), "")) {
         return false;
       }
       out_ << ", access::" << access_str;
-    } else if (auto* ms = tex->As<ast::type::MultisampledTexture>()) {
+    } else if (auto* ms = tex->As<type::MultisampledTexture>()) {
       if (!EmitType(ms->type(), "")) {
         return false;
       }
       out_ << ", access::sample";
-    } else if (auto* sampled = tex->As<ast::type::SampledTexture>()) {
+    } else if (auto* sampled = tex->As<type::SampledTexture>()) {
       if (!EmitType(sampled->type(), "")) {
         return false;
       }
@@ -1984,14 +1981,14 @@
     }
     out_ << ">";
 
-  } else if (type->Is<ast::type::U32>()) {
+  } else if (type->Is<type::U32>()) {
     out_ << "uint";
-  } else if (auto* vec = type->As<ast::type::Vector>()) {
+  } else if (auto* vec = type->As<type::Vector>()) {
     if (!EmitType(vec->type(), "")) {
       return false;
     }
     out_ << vec->size();
-  } else if (type->Is<ast::type::Void>()) {
+  } else if (type->Is<type::Void>()) {
     out_ << "void";
   } else {
     error_ = "unknown type in EmitType: " + type->type_name();
@@ -2001,7 +1998,7 @@
   return true;
 }
 
-bool GeneratorImpl::EmitStructType(const ast::type::Struct* str) {
+bool GeneratorImpl::EmitStructType(const type::Struct* str) {
   // TODO(dsinclair): Block decoration?
   // if (str->impl()->decoration() != ast::StructDecoration::kNone) {
   // }
@@ -2040,7 +2037,7 @@
     current_offset += size;
 
     // Array member name will be output with the type
-    if (!mem->type()->Is<ast::type::Array>()) {
+    if (!mem->type()->Is<type::Array>()) {
       out_ << " " << namer_.NameFor(module_->SymbolToName(mem->symbol()));
     }
     out_ << ";" << std::endl;
@@ -2086,7 +2083,7 @@
   if (!EmitType(var->type(), module_->SymbolToName(var->symbol()))) {
     return false;
   }
-  if (!var->type()->Is<ast::type::Array>()) {
+  if (!var->type()->Is<type::Array>()) {
     out_ << " " << module_->SymbolToName(var->symbol());
   }
 
@@ -2128,7 +2125,7 @@
   if (!EmitType(var->type(), module_->SymbolToName(var->symbol()))) {
     return false;
   }
-  if (!var->type()->Is<ast::type::Array>()) {
+  if (!var->type()->Is<type::Array>()) {
     out_ << " " << module_->SymbolToName(var->symbol());
   }
 
diff --git a/src/writer/msl/generator_impl.h b/src/writer/msl/generator_impl.h
index 63ff186..95b6109 100644
--- a/src/writer/msl/generator_impl.h
+++ b/src/writer/msl/generator_impl.h
@@ -39,10 +39,10 @@
 #include "src/ast/return_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/struct_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/scope_stack.h"
+#include "src/type/struct_type.h"
 #include "src/writer/msl/namer.h"
 #include "src/writer/text_generator.h"
 
@@ -65,16 +65,16 @@
   /// for pointers as the size is unknown.
   /// @param type the type to calculate the alignment size for
   /// @returns the number of bytes used to align `type` or 0 on error
-  uint32_t calculate_alignment_size(ast::type::Type* type);
+  uint32_t calculate_alignment_size(type::Type* type);
   /// Calculates the largest alignment seen within a struct
   /// @param type the struct to calculate
   /// @returns the largest alignment value
-  uint32_t calculate_largest_alignment(ast::type::Struct* type);
+  uint32_t calculate_largest_alignment(type::Struct* type);
 
   /// Handles generating a constructed
   /// @param ty the constructed type to generate
   /// @returns true if the constructed type was emitted
-  bool EmitConstructedType(const ast::type::Type* ty);
+  bool EmitConstructedType(const type::Type* ty);
   /// Handles an array accessor expression
   /// @param expr the expression to emit
   /// @returns true if the array accessor was emitted
@@ -204,11 +204,11 @@
   /// @param type the type to generate
   /// @param name the name of the variable, only used for array emission
   /// @returns true if the type is emitted
-  bool EmitType(ast::type::Type* type, const std::string& name);
+  bool EmitType(type::Type* type, const std::string& name);
   /// Handles generating a struct declaration
   /// @param str the struct to generate
   /// @returns true if the struct is emitted
-  bool EmitStructType(const ast::type::Struct* str);
+  bool EmitStructType(const type::Struct* str);
   /// Handles emitting a type constructor
   /// @param expr the type constructor expression
   /// @returns true if the constructor is emitted
@@ -229,7 +229,7 @@
   /// Emits the zero value for the given type
   /// @param type the type to emit the value for
   /// @returns true if the zero value was successfully emitted.
-  bool EmitZeroValue(ast::type::Type* type);
+  bool EmitZeroValue(type::Type* type);
 
   /// Determines if the function needs the input struct passed to it.
   /// @param func the function to check
diff --git a/src/writer/msl/generator_impl_alias_type_test.cc b/src/writer/msl/generator_impl_alias_type_test.cc
index b22aa74..0648d20 100644
--- a/src/writer/msl/generator_impl_alias_type_test.cc
+++ b/src/writer/msl/generator_impl_alias_type_test.cc
@@ -16,7 +16,7 @@
 #include "src/ast/module.h"
 #include "src/ast/struct.h"
 #include "src/ast/struct_member.h"
-#include "src/ast/type/struct_type.h"
+#include "src/type/struct_type.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
diff --git a/src/writer/msl/generator_impl_array_accessor_test.cc b/src/writer/msl/generator_impl_array_accessor_test.cc
index 5b5c54d..9f8cda6 100644
--- a/src/writer/msl/generator_impl_array_accessor_test.cc
+++ b/src/writer/msl/generator_impl_array_accessor_test.cc
@@ -20,7 +20,7 @@
 #include "src/ast/module.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
diff --git a/src/writer/msl/generator_impl_bitcast_test.cc b/src/writer/msl/generator_impl_bitcast_test.cc
index de56fd8..372a889 100644
--- a/src/writer/msl/generator_impl_bitcast_test.cc
+++ b/src/writer/msl/generator_impl_bitcast_test.cc
@@ -18,7 +18,7 @@
 #include "src/ast/bitcast_expression.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/module.h"
-#include "src/ast/type/f32_type.h"
+#include "src/type/f32_type.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
diff --git a/src/writer/msl/generator_impl_call_test.cc b/src/writer/msl/generator_impl_call_test.cc
index 3b7c9ed..6df0f19 100644
--- a/src/writer/msl/generator_impl_call_test.cc
+++ b/src/writer/msl/generator_impl_call_test.cc
@@ -20,7 +20,7 @@
 #include "src/ast/function.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/module.h"
-#include "src/ast/type/void_type.h"
+#include "src/type/void_type.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
diff --git a/src/writer/msl/generator_impl_case_test.cc b/src/writer/msl/generator_impl_case_test.cc
index dd19fcc..a37f33e 100644
--- a/src/writer/msl/generator_impl_case_test.cc
+++ b/src/writer/msl/generator_impl_case_test.cc
@@ -21,7 +21,7 @@
 #include "src/ast/identifier_expression.h"
 #include "src/ast/module.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
diff --git a/src/writer/msl/generator_impl_cast_test.cc b/src/writer/msl/generator_impl_cast_test.cc
index 3713b86..1377987 100644
--- a/src/writer/msl/generator_impl_cast_test.cc
+++ b/src/writer/msl/generator_impl_cast_test.cc
@@ -17,9 +17,9 @@
 #include "gtest/gtest.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/module.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
+#include "src/type/f32_type.h"
+#include "src/type/vector_type.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
diff --git a/src/writer/msl/generator_impl_constructor_test.cc b/src/writer/msl/generator_impl_constructor_test.cc
index ff82185..aa38874 100644
--- a/src/writer/msl/generator_impl_constructor_test.cc
+++ b/src/writer/msl/generator_impl_constructor_test.cc
@@ -18,15 +18,15 @@
 #include "src/ast/module.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
@@ -117,7 +117,7 @@
 }
 
 TEST_F(MslGeneratorImplTest, EmitConstructor_Type_Array) {
-  ast::type::Array ary(ty.vec3<f32>(), 3, ast::ArrayDecorationList{});
+  type::Array ary(ty.vec3<f32>(), 3, ast::ArrayDecorationList{});
 
   ast::ExpressionList ary_values;
 
diff --git a/src/writer/msl/generator_impl_function_entry_point_data_test.cc b/src/writer/msl/generator_impl_function_entry_point_data_test.cc
index 461035b..dbe62b9 100644
--- a/src/writer/msl/generator_impl_function_entry_point_data_test.cc
+++ b/src/writer/msl/generator_impl_function_entry_point_data_test.cc
@@ -22,11 +22,11 @@
 #include "src/ast/module.h"
 #include "src/ast/pipeline_stage.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/variable.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
diff --git a/src/writer/msl/generator_impl_function_test.cc b/src/writer/msl/generator_impl_function_test.cc
index 53b80ec..0ad50d3 100644
--- a/src/writer/msl/generator_impl_function_test.cc
+++ b/src/writer/msl/generator_impl_function_test.cc
@@ -35,15 +35,15 @@
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_decoration.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
@@ -329,7 +329,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  ast::type::AccessControl ac(ast::AccessControl::kReadWrite, s);
+  type::AccessControl ac(ast::AccessControl::kReadWrite, s);
 
   mod->AddConstructedType(s);
 
@@ -382,7 +382,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  ast::type::AccessControl ac(ast::AccessControl::kReadOnly, s);
+  type::AccessControl ac(ast::AccessControl::kReadOnly, s);
   mod->AddConstructedType(s);
 
   auto* coord_var =
@@ -687,7 +687,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  ast::type::AccessControl ac(ast::AccessControl::kReadWrite, s);
+  type::AccessControl ac(ast::AccessControl::kReadWrite, s);
   mod->AddConstructedType(s);
 
   auto* coord_var =
@@ -754,7 +754,7 @@
       ast::StructDecorationList{});
 
   auto* s = ty.struct_("Data", str);
-  ast::type::AccessControl ac(ast::AccessControl::kReadOnly, s);
+  type::AccessControl ac(ast::AccessControl::kReadOnly, s);
   mod->AddConstructedType(s);
 
   auto* coord_var =
@@ -933,7 +933,7 @@
       ast::StructMemberList{Member("d", ty.f32, {MemberOffset(0)})}, s_decos);
 
   auto* s = ty.struct_("Data", str);
-  ast::type::AccessControl ac(ast::AccessControl::kReadWrite, s);
+  type::AccessControl ac(ast::AccessControl::kReadWrite, s);
 
   auto* data_var =
       Var("data", ast::StorageClass::kStorage, &ac, nullptr,
diff --git a/src/writer/msl/generator_impl_import_test.cc b/src/writer/msl/generator_impl_import_test.cc
index b7d97d6..e123331 100644
--- a/src/writer/msl/generator_impl_import_test.cc
+++ b/src/writer/msl/generator_impl_import_test.cc
@@ -23,11 +23,11 @@
 #include "src/ast/module.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/vector_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
diff --git a/src/writer/msl/generator_impl_intrinsic_test.cc b/src/writer/msl/generator_impl_intrinsic_test.cc
index b1f0e92..41fa96e 100644
--- a/src/writer/msl/generator_impl_intrinsic_test.cc
+++ b/src/writer/msl/generator_impl_intrinsic_test.cc
@@ -16,8 +16,8 @@
 #include "src/ast/call_expression.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/module.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/vector_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
diff --git a/src/writer/msl/generator_impl_intrinsic_texture_test.cc b/src/writer/msl/generator_impl_intrinsic_texture_test.cc
index 54c2a9e..4767626 100644
--- a/src/writer/msl/generator_impl_intrinsic_texture_test.cc
+++ b/src/writer/msl/generator_impl_intrinsic_texture_test.cc
@@ -17,9 +17,9 @@
 #include "gtest/gtest.h"
 #include "src/ast/builder.h"
 #include "src/ast/intrinsic_texture_helper_test.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/sampled_texture_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/sampled_texture_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/msl/generator_impl.h"
 
diff --git a/src/writer/msl/generator_impl_loop_test.cc b/src/writer/msl/generator_impl_loop_test.cc
index 76e8a3e..d7f13ab 100644
--- a/src/writer/msl/generator_impl_loop_test.cc
+++ b/src/writer/msl/generator_impl_loop_test.cc
@@ -22,9 +22,9 @@
 #include "src/ast/loop_statement.h"
 #include "src/ast/module.h"
 #include "src/ast/return_statement.h"
-#include "src/ast/type/f32_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/f32_type.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
diff --git a/src/writer/msl/generator_impl_module_constant_test.cc b/src/writer/msl/generator_impl_module_constant_test.cc
index 7e272d6..d251dc6 100644
--- a/src/writer/msl/generator_impl_module_constant_test.cc
+++ b/src/writer/msl/generator_impl_module_constant_test.cc
@@ -20,8 +20,8 @@
 #include "src/ast/float_literal.h"
 #include "src/ast/module.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/f32_type.h"
+#include "src/type/array_type.h"
+#include "src/type/f32_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/variable.h"
 #include "src/writer/msl/generator_impl.h"
diff --git a/src/writer/msl/generator_impl_switch_test.cc b/src/writer/msl/generator_impl_switch_test.cc
index c67822a..8123138 100644
--- a/src/writer/msl/generator_impl_switch_test.cc
+++ b/src/writer/msl/generator_impl_switch_test.cc
@@ -21,7 +21,7 @@
 #include "src/ast/module.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
diff --git a/src/writer/msl/generator_impl_test.cc b/src/writer/msl/generator_impl_test.cc
index c73e148..69de899 100644
--- a/src/writer/msl/generator_impl_test.cc
+++ b/src/writer/msl/generator_impl_test.cc
@@ -26,17 +26,17 @@
 #include "src/ast/struct.h"
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/writer/msl/namer.h"
 #include "src/writer/msl/test_helper.h"
 
@@ -137,7 +137,7 @@
 }
 
 TEST_F(MslGeneratorImplTest, calculate_alignment_size_pointer) {
-  ast::type::Pointer ptr(ty.bool_, ast::StorageClass::kPrivate);
+  type::Pointer ptr(ty.bool_, ast::StorageClass::kPrivate);
   EXPECT_EQ(0u, gen.calculate_alignment_size(&ptr));
 }
 
@@ -187,7 +187,7 @@
 TEST_P(MslVectorSizeBoolTest, calculate) {
   auto param = GetParam();
 
-  ast::type::Vector vec(ty.bool_, param.elements);
+  type::Vector vec(ty.bool_, param.elements);
   EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
 }
 INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
@@ -200,7 +200,7 @@
 TEST_P(MslVectorSizeI32Test, calculate) {
   auto param = GetParam();
 
-  ast::type::Vector vec(ty.i32, param.elements);
+  type::Vector vec(ty.i32, param.elements);
   EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
 }
 INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
@@ -213,7 +213,7 @@
 TEST_P(MslVectorSizeU32Test, calculate) {
   auto param = GetParam();
 
-  ast::type::Vector vec(ty.u32, param.elements);
+  type::Vector vec(ty.u32, param.elements);
   EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
 }
 INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
@@ -226,7 +226,7 @@
 TEST_P(MslVectorSizeF32Test, calculate) {
   auto param = GetParam();
 
-  ast::type::Vector vec(ty.f32, param.elements);
+  type::Vector vec(ty.f32, param.elements);
   EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
 }
 INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
diff --git a/src/writer/msl/generator_impl_type_test.cc b/src/writer/msl/generator_impl_type_test.cc
index 90c3c88..8bc1146 100644
--- a/src/writer/msl/generator_impl_type_test.cc
+++ b/src/writer/msl/generator_impl_type_test.cc
@@ -20,22 +20,22 @@
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_decoration.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
@@ -131,7 +131,7 @@
 
 // TODO(dsinclair): How to annotate as workgroup?
 TEST_F(MslGeneratorImplTest, DISABLED_EmitType_Pointer) {
-  ast::type::Pointer p(ty.f32, ast::StorageClass::kWorkgroup);
+  type::Pointer p(ty.f32, ast::StorageClass::kWorkgroup);
 
   ASSERT_TRUE(gen.EmitType(&p, "")) << gen.error();
   EXPECT_EQ(gen.result(), "float*");
@@ -233,21 +233,21 @@
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_Sampler) {
-  ast::type::Sampler sampler(ast::type::SamplerKind::kSampler);
+  type::Sampler sampler(type::SamplerKind::kSampler);
 
   ASSERT_TRUE(gen.EmitType(&sampler, "")) << gen.error();
   EXPECT_EQ(gen.result(), "sampler");
 }
 
 TEST_F(MslGeneratorImplTest, EmitType_SamplerComparison) {
-  ast::type::Sampler sampler(ast::type::SamplerKind::kComparisonSampler);
+  type::Sampler sampler(type::SamplerKind::kComparisonSampler);
 
   ASSERT_TRUE(gen.EmitType(&sampler, "")) << gen.error();
   EXPECT_EQ(gen.result(), "sampler");
 }
 
 struct MslDepthTextureData {
-  ast::type::TextureDimension dim;
+  type::TextureDimension dim;
   std::string result;
 };
 inline std::ostream& operator<<(std::ostream& out, MslDepthTextureData data) {
@@ -258,7 +258,7 @@
 TEST_P(MslDepthTexturesTest, Emit) {
   auto params = GetParam();
 
-  ast::type::DepthTexture s(params.dim);
+  type::DepthTexture s(params.dim);
 
   ASSERT_TRUE(gen.EmitType(&s, "")) << gen.error();
   EXPECT_EQ(gen.result(), params.result);
@@ -266,18 +266,18 @@
 INSTANTIATE_TEST_SUITE_P(
     MslGeneratorImplTest,
     MslDepthTexturesTest,
-    testing::Values(MslDepthTextureData{ast::type::TextureDimension::k2d,
+    testing::Values(MslDepthTextureData{type::TextureDimension::k2d,
                                         "depth2d<float, access::sample>"},
-                    MslDepthTextureData{ast::type::TextureDimension::k2dArray,
+                    MslDepthTextureData{type::TextureDimension::k2dArray,
                                         "depth2d_array<float, access::sample>"},
-                    MslDepthTextureData{ast::type::TextureDimension::kCube,
+                    MslDepthTextureData{type::TextureDimension::kCube,
                                         "depthcube<float, access::sample>"},
                     MslDepthTextureData{
-                        ast::type::TextureDimension::kCubeArray,
+                        type::TextureDimension::kCubeArray,
                         "depthcube_array<float, access::sample>"}));
 
 struct MslTextureData {
-  ast::type::TextureDimension dim;
+  type::TextureDimension dim;
   std::string result;
 };
 inline std::ostream& operator<<(std::ostream& out, MslTextureData data) {
@@ -288,7 +288,7 @@
 TEST_P(MslSampledtexturesTest, Emit) {
   auto params = GetParam();
 
-  ast::type::SampledTexture s(params.dim, ty.f32);
+  type::SampledTexture s(params.dim, ty.f32);
 
   ASSERT_TRUE(gen.EmitType(&s, "")) << gen.error();
   EXPECT_EQ(gen.result(), params.result);
@@ -296,31 +296,31 @@
 INSTANTIATE_TEST_SUITE_P(
     MslGeneratorImplTest,
     MslSampledtexturesTest,
-    testing::Values(MslTextureData{ast::type::TextureDimension::k1d,
+    testing::Values(MslTextureData{type::TextureDimension::k1d,
                                    "texture1d<float, access::sample>"},
-                    MslTextureData{ast::type::TextureDimension::k1dArray,
+                    MslTextureData{type::TextureDimension::k1dArray,
                                    "texture1d_array<float, access::sample>"},
-                    MslTextureData{ast::type::TextureDimension::k2d,
+                    MslTextureData{type::TextureDimension::k2d,
                                    "texture2d<float, access::sample>"},
-                    MslTextureData{ast::type::TextureDimension::k2dArray,
+                    MslTextureData{type::TextureDimension::k2dArray,
                                    "texture2d_array<float, access::sample>"},
-                    MslTextureData{ast::type::TextureDimension::k3d,
+                    MslTextureData{type::TextureDimension::k3d,
                                    "texture3d<float, access::sample>"},
-                    MslTextureData{ast::type::TextureDimension::kCube,
+                    MslTextureData{type::TextureDimension::kCube,
                                    "texturecube<float, access::sample>"},
                     MslTextureData{
-                        ast::type::TextureDimension::kCubeArray,
+                        type::TextureDimension::kCubeArray,
                         "texturecube_array<float, access::sample>"}));
 
 TEST_F(MslGeneratorImplTest, Emit_TypeMultisampledTexture) {
-  ast::type::MultisampledTexture s(ast::type::TextureDimension::k2d, ty.u32);
+  type::MultisampledTexture s(type::TextureDimension::k2d, ty.u32);
 
   ASSERT_TRUE(gen.EmitType(&s, "")) << gen.error();
   EXPECT_EQ(gen.result(), "texture2d_ms<uint, access::sample>");
 }
 
 struct MslStorageTextureData {
-  ast::type::TextureDimension dim;
+  type::TextureDimension dim;
   bool ro;
   std::string result;
 };
@@ -332,11 +332,10 @@
 TEST_P(MslStorageTexturesTest, Emit) {
   auto params = GetParam();
 
-  ast::type::StorageTexture s(params.dim,
-                              ast::type::ImageFormat::kR16Float);
-  ast::type::AccessControl ac(params.ro ? ast::AccessControl::kReadOnly
-                                        : ast::AccessControl::kWriteOnly,
-                              &s);
+  type::StorageTexture s(params.dim, type::ImageFormat::kR16Float);
+  type::AccessControl ac(params.ro ? ast::AccessControl::kReadOnly
+                                   : ast::AccessControl::kWriteOnly,
+                         &s);
 
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&s)) << td.error();
   ASSERT_TRUE(gen.EmitType(&ac, "")) << gen.error();
@@ -346,25 +345,25 @@
     MslGeneratorImplTest,
     MslStorageTexturesTest,
     testing::Values(
-        MslStorageTextureData{ast::type::TextureDimension::k1d, true,
+        MslStorageTextureData{type::TextureDimension::k1d, true,
                               "texture1d<float, access::read>"},
-        MslStorageTextureData{ast::type::TextureDimension::k1dArray, true,
+        MslStorageTextureData{type::TextureDimension::k1dArray, true,
                               "texture1d_array<float, access::read>"},
-        MslStorageTextureData{ast::type::TextureDimension::k2d, true,
+        MslStorageTextureData{type::TextureDimension::k2d, true,
                               "texture2d<float, access::read>"},
-        MslStorageTextureData{ast::type::TextureDimension::k2dArray, true,
+        MslStorageTextureData{type::TextureDimension::k2dArray, true,
                               "texture2d_array<float, access::read>"},
-        MslStorageTextureData{ast::type::TextureDimension::k3d, true,
+        MslStorageTextureData{type::TextureDimension::k3d, true,
                               "texture3d<float, access::read>"},
-        MslStorageTextureData{ast::type::TextureDimension::k1d, false,
+        MslStorageTextureData{type::TextureDimension::k1d, false,
                               "texture1d<float, access::write>"},
-        MslStorageTextureData{ast::type::TextureDimension::k1dArray, false,
+        MslStorageTextureData{type::TextureDimension::k1dArray, false,
                               "texture1d_array<float, access::write>"},
-        MslStorageTextureData{ast::type::TextureDimension::k2d, false,
+        MslStorageTextureData{type::TextureDimension::k2d, false,
                               "texture2d<float, access::write>"},
-        MslStorageTextureData{ast::type::TextureDimension::k2dArray, false,
+        MslStorageTextureData{type::TextureDimension::k2dArray, false,
                               "texture2d_array<float, access::write>"},
-        MslStorageTextureData{ast::type::TextureDimension::k3d, false,
+        MslStorageTextureData{type::TextureDimension::k3d, false,
                               "texture3d<float, access::write>"}));
 
 }  // namespace
diff --git a/src/writer/msl/generator_impl_variable_decl_statement_test.cc b/src/writer/msl/generator_impl_variable_decl_statement_test.cc
index 777bb32..3da40f8 100644
--- a/src/writer/msl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/msl/generator_impl_variable_decl_statement_test.cc
@@ -23,13 +23,13 @@
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_decoration.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/array_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/vector_type.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
@@ -61,7 +61,7 @@
 }
 
 TEST_F(MslGeneratorImplTest, Emit_VariableDeclStatement_Array) {
-  ast::type::Array ary(ty.f32, 5, ast::ArrayDecorationList{});
+  type::Array ary(ty.f32, 5, ast::ArrayDecorationList{});
 
   auto* var = Var("a", ast::StorageClass::kNone, &ary);
   auto* stmt = create<ast::VariableDeclStatement>(var);
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 26212e6..bfd42d7 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -52,27 +52,27 @@
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_offset_decoration.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/writer/append_vector.h"
 
 namespace tint {
@@ -152,15 +152,14 @@
 /// one or more levels of an arrays inside of `type`.
 /// @param type the given type, which must not be null
 /// @returns the nested matrix type, or nullptr if none
-ast::type::Matrix* GetNestedMatrixType(ast::type::Type* type) {
-  while (auto* arr = type->As<ast::type::Array>()) {
+type::Matrix* GetNestedMatrixType(type::Type* type) {
+  while (auto* arr = type->As<type::Array>()) {
     type = arr->type();
   }
-  return type->As<ast::type::Matrix>();
+  return type->As<type::Matrix>();
 }
 
-uint32_t intrinsic_to_glsl_method(ast::type::Type* type,
-                                  ast::Intrinsic intrinsic) {
+uint32_t intrinsic_to_glsl_method(type::Type* type, ast::Intrinsic intrinsic) {
   switch (intrinsic) {
     case ast::Intrinsic::kAbs:
       if (type->is_float_scalar_or_vector()) {
@@ -273,8 +272,8 @@
 }
 
 /// @return the vector element type if ty is a vector, otherwise return ty.
-ast::type::Type* ElementTypeOf(ast::type::Type* ty) {
-  if (auto* v = ty->As<ast::type::Vector>()) {
+type::Type* ElementTypeOf(type::Type* ty) {
+  if (auto* v = ty->As<type::Vector>()) {
     return v->type();
   }
   return ty;
@@ -386,7 +385,7 @@
 }
 
 uint32_t Builder::GenerateU32Literal(uint32_t val) {
-  ast::type::U32 u32;
+  type::U32 u32;
   ast::SintLiteral lit(Source{}, &u32, val);
   return GenerateLiteralIfNeeded(nullptr, &lit);
 }
@@ -651,7 +650,7 @@
   auto result = result_op();
   auto var_id = result.to_i();
   auto sc = ast::StorageClass::kFunction;
-  ast::type::Pointer pt(var->type(), sc);
+  type::Pointer pt(var->type(), sc);
   auto type_id = GenerateTypeIfNeeded(&pt);
   if (type_id == 0) {
     return false;
@@ -725,7 +724,7 @@
                 ? ast::StorageClass::kPrivate
                 : var->storage_class();
 
-  ast::type::Pointer pt(var->type(), sc);
+  type::Pointer pt(var->type(), sc);
   auto type_id = GenerateTypeIfNeeded(&pt);
   if (type_id == 0) {
     return false;
@@ -743,8 +742,8 @@
   auto* type = var->type()->UnwrapAll();
   if (var->has_constructor()) {
     ops.push_back(Operand::Int(init_id));
-  } else if (type->Is<ast::type::Texture>()) {
-    if (auto* ac = var->type()->As<ast::type::AccessControl>()) {
+  } else if (type->Is<type::Texture>()) {
+    if (auto* ac = var->type()->As<type::AccessControl>()) {
       switch (ac->access_control()) {
         case ast::AccessControl::kWriteOnly:
           push_annot(
@@ -760,7 +759,7 @@
           break;
       }
     }
-  } else if (!type->Is<ast::type::Sampler>()) {
+  } else if (!type->Is<type::Sampler>()) {
     // Certain cases require us to generate a constructor value.
     //
     // 1- ConstantId's must be attached to the OpConstant, if we have a
@@ -769,16 +768,16 @@
     // 2- If we don't have a constructor and we're an Output or Private variable
     //    then WGSL requires an initializer.
     if (var->HasConstantIdDecoration()) {
-      if (type->Is<ast::type::F32>()) {
+      if (type->Is<type::F32>()) {
         ast::FloatLiteral l(Source{}, type, 0.0f);
         init_id = GenerateLiteralIfNeeded(var, &l);
-      } else if (type->Is<ast::type::U32>()) {
+      } else if (type->Is<type::U32>()) {
         ast::UintLiteral l(Source{}, type, 0);
         init_id = GenerateLiteralIfNeeded(var, &l);
-      } else if (type->Is<ast::type::I32>()) {
+      } else if (type->Is<type::I32>()) {
         ast::SintLiteral l(Source{}, type, 0);
         init_id = GenerateLiteralIfNeeded(var, &l);
-      } else if (type->Is<ast::type::Bool>()) {
+      } else if (type->Is<type::Bool>()) {
         ast::BoolLiteral l(Source{}, type, false);
         init_id = GenerateLiteralIfNeeded(var, &l);
       } else {
@@ -843,9 +842,9 @@
 
   // If the source is a pointer we access chain into it. We also access chain
   // into an array of non-scalar types.
-  if (info->source_type->Is<ast::type::Pointer>() ||
-      (info->source_type->Is<ast::type::Array>() &&
-       !info->source_type->As<ast::type::Array>()->type()->is_scalar())) {
+  if (info->source_type->Is<type::Pointer>() ||
+      (info->source_type->Is<type::Array>() &&
+       !info->source_type->As<type::Array>()->type()->is_scalar())) {
     info->access_chain_indices.push_back(idx_id);
     info->source_type = expr->result_type();
     return true;
@@ -880,15 +879,15 @@
 
   // If the data_type is a structure we're accessing a member, if it's a
   // vector we're accessing a swizzle.
-  if (data_type->Is<ast::type::Struct>()) {
-    if (!info->source_type->Is<ast::type::Pointer>()) {
+  if (data_type->Is<type::Struct>()) {
+    if (!info->source_type->Is<type::Pointer>()) {
       error_ =
           "Attempting to access a struct member on a non-pointer. Something is "
           "wrong";
       return false;
     }
 
-    auto* strct = data_type->As<ast::type::Struct>()->impl();
+    auto* strct = data_type->As<type::Struct>()->impl();
     auto symbol = expr->member()->symbol();
 
     uint32_t i = 0;
@@ -908,7 +907,7 @@
     return true;
   }
 
-  if (!data_type->Is<ast::type::Vector>()) {
+  if (!data_type->Is<type::Vector>()) {
     error_ = "Member accessor without a struct or vector. Something is wrong";
     return false;
   }
@@ -923,7 +922,7 @@
       return false;
     }
 
-    if (info->source_type->Is<ast::type::Pointer>()) {
+    if (info->source_type->Is<type::Pointer>()) {
       auto idx_id = GenerateU32Literal(val);
       if (idx_id == 0) {
         return 0;
@@ -1044,10 +1043,10 @@
   if (auto* array = accessors[0]->As<ast::ArrayAccessorExpression>()) {
     auto* ary_res_type = array->array()->result_type();
 
-    if (!ary_res_type->Is<ast::type::Pointer>() &&
-        (ary_res_type->Is<ast::type::Array>() &&
-         !ary_res_type->As<ast::type::Array>()->type()->is_scalar())) {
-      ast::type::Pointer ptr(ary_res_type, ast::StorageClass::kFunction);
+    if (!ary_res_type->Is<type::Pointer>() &&
+        (ary_res_type->Is<type::Array>() &&
+         !ary_res_type->As<type::Array>()->type()->is_scalar())) {
+      type::Pointer ptr(ary_res_type, ast::StorageClass::kFunction);
       auto result_type_id = GenerateTypeIfNeeded(&ptr);
       if (result_type_id == 0) {
         return 0;
@@ -1126,8 +1125,8 @@
   return 0;
 }
 
-uint32_t Builder::GenerateLoadIfNeeded(ast::type::Type* type, uint32_t id) {
-  if (!type->Is<ast::type::Pointer>()) {
+uint32_t Builder::GenerateLoadIfNeeded(type::Type* type, uint32_t id) {
+  if (!type->Is<type::Pointer>()) {
     return id;
   }
 
@@ -1237,7 +1236,7 @@
     }
 
     auto* sc = e->As<ast::ScalarConstructorExpression>();
-    if (result_type->Is<ast::type::Vector>() && sc == nullptr) {
+    if (result_type->Is<type::Vector>() && sc == nullptr) {
       return false;
     }
 
@@ -1246,14 +1245,14 @@
       continue;
     }
 
-    ast::type::Type* subtype = result_type->UnwrapAll();
-    if (auto* vec = subtype->As<ast::type::Vector>()) {
+    type::Type* subtype = result_type->UnwrapAll();
+    if (auto* vec = subtype->As<type::Vector>()) {
       subtype = vec->type()->UnwrapAll();
-    } else if (auto* mat = subtype->As<ast::type::Matrix>()) {
+    } else if (auto* mat = subtype->As<type::Matrix>()) {
       subtype = mat->type()->UnwrapAll();
-    } else if (auto* arr = subtype->As<ast::type::Array>()) {
+    } else if (auto* arr = subtype->As<type::Array>()) {
       subtype = arr->type()->UnwrapAll();
-    } else if (auto* str = subtype->As<ast::type::Struct>()) {
+    } else if (auto* str = subtype->As<type::Struct>()) {
       subtype = str->impl()->members()[i]->type()->UnwrapAll();
     }
     if (subtype != sc->result_type()->UnwrapAll()) {
@@ -1285,10 +1284,10 @@
 
   bool can_cast_or_copy = result_type->is_scalar();
 
-  if (auto* res_vec = result_type->As<ast::type::Vector>()) {
+  if (auto* res_vec = result_type->As<type::Vector>()) {
     if (res_vec->type()->is_scalar()) {
       auto* value_type = values[0]->result_type()->UnwrapAll();
-      if (auto* val_vec = value_type->As<ast::type::Vector>()) {
+      if (auto* val_vec = value_type->As<type::Vector>()) {
         if (val_vec->type()->is_scalar()) {
           can_cast_or_copy = res_vec->size() == val_vec->size();
         }
@@ -1308,7 +1307,7 @@
   bool result_is_constant_composite = constructor_is_const;
   bool result_is_spec_composite = false;
 
-  if (auto* vec = result_type->As<ast::type::Vector>()) {
+  if (auto* vec = result_type->As<type::Vector>()) {
     result_type = vec->type();
   }
 
@@ -1330,9 +1329,8 @@
     // If the result and value types are the same we can just use the object.
     // If the result is not a vector then we should have validated that the
     // value type is a correctly sized vector so we can just use it directly.
-    if (result_type == value_type || result_type->Is<ast::type::Matrix>() ||
-        result_type->Is<ast::type::Array>() ||
-        result_type->Is<ast::type::Struct>()) {
+    if (result_type == value_type || result_type->Is<type::Matrix>() ||
+        result_type->Is<type::Array>() || result_type->Is<type::Struct>()) {
       out << "_" << id;
 
       ops.push_back(Operand::Int(id));
@@ -1357,7 +1355,7 @@
     //
     // For cases 1 and 2, if the type is different we also may need to insert
     // a type cast.
-    if (auto* vec = value_type->As<ast::type::Vector>()) {
+    if (auto* vec = value_type->As<type::Vector>()) {
       auto* vec_type = vec->type();
 
       auto value_type_id = GenerateTypeIfNeeded(vec_type);
@@ -1428,7 +1426,7 @@
   return result.to_i();
 }
 
-uint32_t Builder::GenerateCastOrCopyOrPassthrough(ast::type::Type* to_type,
+uint32_t Builder::GenerateCastOrCopyOrPassthrough(type::Type* to_type,
                                                   ast::Expression* from_expr) {
   auto result = result_op();
   auto result_id = result.to_i();
@@ -1447,38 +1445,29 @@
   auto* from_type = from_expr->result_type()->UnwrapPtrIfNeeded();
 
   spv::Op op = spv::Op::OpNop;
-  if ((from_type->Is<ast::type::I32>() && to_type->Is<ast::type::F32>()) ||
+  if ((from_type->Is<type::I32>() && to_type->Is<type::F32>()) ||
       (from_type->is_signed_integer_vector() && to_type->is_float_vector())) {
     op = spv::Op::OpConvertSToF;
-  } else if ((from_type->Is<ast::type::U32>() &&
-              to_type->Is<ast::type::F32>()) ||
+  } else if ((from_type->Is<type::U32>() && to_type->Is<type::F32>()) ||
              (from_type->is_unsigned_integer_vector() &&
               to_type->is_float_vector())) {
     op = spv::Op::OpConvertUToF;
-  } else if ((from_type->Is<ast::type::F32>() &&
-              to_type->Is<ast::type::I32>()) ||
+  } else if ((from_type->Is<type::F32>() && to_type->Is<type::I32>()) ||
              (from_type->is_float_vector() &&
               to_type->is_signed_integer_vector())) {
     op = spv::Op::OpConvertFToS;
-  } else if ((from_type->Is<ast::type::F32>() &&
-              to_type->Is<ast::type::U32>()) ||
+  } else if ((from_type->Is<type::F32>() && to_type->Is<type::U32>()) ||
              (from_type->is_float_vector() &&
               to_type->is_unsigned_integer_vector())) {
     op = spv::Op::OpConvertFToU;
-  } else if ((from_type->Is<ast::type::Bool>() &&
-              to_type->Is<ast::type::Bool>()) ||
-             (from_type->Is<ast::type::U32>() &&
-              to_type->Is<ast::type::U32>()) ||
-             (from_type->Is<ast::type::I32>() &&
-              to_type->Is<ast::type::I32>()) ||
-             (from_type->Is<ast::type::F32>() &&
-              to_type->Is<ast::type::F32>()) ||
-             (from_type->Is<ast::type::Vector>() && (from_type == to_type))) {
+  } else if ((from_type->Is<type::Bool>() && to_type->Is<type::Bool>()) ||
+             (from_type->Is<type::U32>() && to_type->Is<type::U32>()) ||
+             (from_type->Is<type::I32>() && to_type->Is<type::I32>()) ||
+             (from_type->Is<type::F32>() && to_type->Is<type::F32>()) ||
+             (from_type->Is<type::Vector>() && (from_type == to_type))) {
     return val_id;
-  } else if ((from_type->Is<ast::type::I32>() &&
-              to_type->Is<ast::type::U32>()) ||
-             (from_type->Is<ast::type::U32>() &&
-              to_type->Is<ast::type::I32>()) ||
+  } else if ((from_type->Is<type::I32>() && to_type->Is<type::U32>()) ||
+             (from_type->Is<type::U32>() && to_type->Is<type::I32>()) ||
              (from_type->is_signed_integer_vector() &&
               to_type->is_unsigned_integer_vector()) ||
              (from_type->is_unsigned_integer_vector() &&
@@ -1902,14 +1891,14 @@
     params.push_back(Operand::Int(struct_id));
 
     auto* type = accessor->structure()->result_type()->UnwrapAll();
-    if (!type->Is<ast::type::Struct>()) {
+    if (!type->Is<type::Struct>()) {
       error_ =
           "invalid type (" + type->type_name() + ") for runtime array length";
       return 0;
     }
     // Runtime array must be the last member in the structure
     params.push_back(Operand::Int(
-        uint32_t(type->As<ast::type::Struct>()->impl()->members().size() - 1)));
+        uint32_t(type->As<type::Struct>()->impl()->members().size() - 1)));
 
     if (!push_function_inst(spv::Op::OpArrayLength, params)) {
       return 0;
@@ -2004,7 +1993,7 @@
   auto* texture_type = call->params()[pidx.texture]
                            ->result_type()
                            ->UnwrapAll()
-                           ->As<ast::type::Texture>();
+                           ->As<type::Texture>();
 
   auto op = spv::Op::OpNop;
 
@@ -2051,9 +2040,9 @@
   // If the texture is not a depth texture, then this function simply delegates
   // to calling append_result_type_and_id_to_spirv_params().
   auto append_result_type_and_id_to_spirv_params_for_read = [&]() {
-    if (texture_type->Is<ast::type::DepthTexture>()) {
-      auto* f32 = mod_->create<ast::type::F32>();
-      auto* spirv_result_type = mod_->create<ast::type::Vector>(f32, 4);
+    if (texture_type->Is<type::DepthTexture>()) {
+      auto* f32 = mod_->create<type::F32>();
+      auto* spirv_result_type = mod_->create<type::Vector>(f32, 4);
       auto spirv_result = result_op();
       post_emission = [=] {
         return push_function_inst(
@@ -2085,7 +2074,7 @@
           auto* element_type = ElementTypeOf(call->result_type());
           auto spirv_result = result_op();
           auto* spirv_result_type =
-              mod_->create<ast::type::Vector>(element_type, spirv_result_width);
+              mod_->create<type::Vector>(element_type, spirv_result_width);
           if (swizzle.size() > 1) {
             post_emission = [=] {
               OperandList operands{
@@ -2165,26 +2154,26 @@
       std::vector<uint32_t> swizzle;
       uint32_t spirv_dims = 0;
       switch (texture_type->dim()) {
-        case ast::type::TextureDimension::kNone:
+        case type::TextureDimension::kNone:
           error_ = "texture dimension is kNone";
           return false;
-        case ast::type::TextureDimension::k1d:
-        case ast::type::TextureDimension::k2d:
-        case ast::type::TextureDimension::k3d:
+        case type::TextureDimension::k1d:
+        case type::TextureDimension::k2d:
+        case type::TextureDimension::k3d:
           break;  // No swizzle needed
-        case ast::type::TextureDimension::k1dArray:
+        case type::TextureDimension::k1dArray:
           swizzle = {0};   // Strip array index
           spirv_dims = 2;  // [width, array count]
           break;
-        case ast::type::TextureDimension::kCube:
+        case type::TextureDimension::kCube:
           swizzle = {0, 1, 1};  // Duplicate height for depth
           spirv_dims = 2;       // [width, height]
           break;
-        case ast::type::TextureDimension::k2dArray:
+        case type::TextureDimension::k2dArray:
           swizzle = {0, 1};  // Strip array index
           spirv_dims = 3;    // [width, height, array_count]
           break;
-        case ast::type::TextureDimension::kCubeArray:
+        case type::TextureDimension::kCubeArray:
           swizzle = {0, 1, 1};  // Strip array index, duplicate height for depth
           spirv_dims = 3;       // [width, height, array_count]
           break;
@@ -2196,14 +2185,14 @@
       }
 
       spirv_params.emplace_back(gen_param(pidx.texture));
-      if (texture_type->Is<ast::type::MultisampledTexture>() ||
-          texture_type->Is<ast::type::StorageTexture>()) {
+      if (texture_type->Is<type::MultisampledTexture>() ||
+          texture_type->Is<type::StorageTexture>()) {
         op = spv::Op::OpImageQuerySize;
       } else if (pidx.level != kNotUsed) {
         op = spv::Op::OpImageQuerySizeLod;
         spirv_params.emplace_back(gen_param(pidx.level));
       } else {
-        ast::SintLiteral i32_0(Source{}, mod_->create<ast::type::I32>(), 0);
+        ast::SintLiteral i32_0(Source{}, mod_->create<type::I32>(), 0);
         op = spv::Op::OpImageQuerySizeLod;
         spirv_params.emplace_back(
             Operand::Int(GenerateLiteralIfNeeded(nullptr, &i32_0)));
@@ -2216,11 +2205,11 @@
         default:
           error_ = "texture is not arrayed";
           return false;
-        case ast::type::TextureDimension::k1dArray:
+        case type::TextureDimension::k1dArray:
           spirv_dims = 2;
           break;
-        case ast::type::TextureDimension::k2dArray:
-        case ast::type::TextureDimension::kCubeArray:
+        case type::TextureDimension::k2dArray:
+        case type::TextureDimension::kCubeArray:
           spirv_dims = 3;
           break;
       }
@@ -2234,11 +2223,11 @@
 
       spirv_params.emplace_back(gen_param(pidx.texture));
 
-      if (texture_type->Is<ast::type::MultisampledTexture>() ||
-          texture_type->Is<ast::type::StorageTexture>()) {
+      if (texture_type->Is<type::MultisampledTexture>() ||
+          texture_type->Is<type::StorageTexture>()) {
         op = spv::Op::OpImageQuerySize;
       } else {
-        ast::SintLiteral i32_0(Source{}, mod_->create<ast::type::I32>(), 0);
+        ast::SintLiteral i32_0(Source{}, mod_->create<type::I32>(), 0);
         op = spv::Op::OpImageQuerySizeLod;
         spirv_params.emplace_back(
             Operand::Int(GenerateLiteralIfNeeded(nullptr, &i32_0)));
@@ -2258,9 +2247,8 @@
       break;
     }
     case ast::Intrinsic::kTextureLoad: {
-      op = texture_type->Is<ast::type::StorageTexture>()
-               ? spv::Op::OpImageRead
-               : spv::Op::OpImageFetch;
+      op = texture_type->Is<type::StorageTexture>() ? spv::Op::OpImageRead
+                                                    : spv::Op::OpImageFetch;
       append_result_type_and_id_to_spirv_params_for_read();
       spirv_params.emplace_back(gen_param(pidx.texture));
       if (!append_coords_to_spirv_params()) {
@@ -2315,10 +2303,10 @@
       }
       assert(pidx.level != kNotUsed);
       auto level = Operand::Int(0);
-      if (call->params()[pidx.level]->result_type()->Is<ast::type::I32>()) {
+      if (call->params()[pidx.level]->result_type()->Is<type::I32>()) {
         // Depth textures have i32 parameters for the level, but SPIR-V expects
         // F32. Cast.
-        auto* f32 = mod_->create<ast::type::F32>();
+        auto* f32 = mod_->create<type::F32>();
         ast::TypeConstructorExpression cast(Source{}, f32,
                                             {call->params()[pidx.level]});
         level = Operand::Int(GenerateExpression(&cast));
@@ -2354,7 +2342,7 @@
       assert(pidx.depth_ref != kNotUsed);
       spirv_params.emplace_back(gen_param(pidx.depth_ref));
 
-      ast::type::F32 f32;
+      type::F32 f32;
       ast::FloatLiteral float_0(Source{}, &f32, 0.0);
       image_operands.emplace_back(ImageOperand{
           SpvImageOperandsLodMask,
@@ -2396,7 +2384,7 @@
   return post_emission();
 }
 
-uint32_t Builder::GenerateSampledImage(ast::type::Type* texture_type,
+uint32_t Builder::GenerateSampledImage(type::Type* texture_type,
                                        Operand texture_operand,
                                        Operand sampler_operand) {
   uint32_t sampled_image_type_id = 0;
@@ -2776,18 +2764,18 @@
   return GenerateFunctionVariable(stmt->variable());
 }
 
-uint32_t Builder::GenerateTypeIfNeeded(ast::type::Type* type) {
+uint32_t Builder::GenerateTypeIfNeeded(type::Type* type) {
   if (type == nullptr) {
     error_ = "attempting to generate type from null type";
     return 0;
   }
 
   // The alias is a wrapper around the subtype, so emit the subtype
-  if (auto* alias = type->As<ast::type::Alias>()) {
+  if (auto* alias = type->As<type::Alias>()) {
     return GenerateTypeIfNeeded(alias->type());
   }
-  if (auto* ac = type->As<ast::type::AccessControl>()) {
-    if (!ac->type()->UnwrapIfNeeded()->Is<ast::type::Struct>()) {
+  if (auto* ac = type->As<type::AccessControl>()) {
+    if (!ac->type()->UnwrapIfNeeded()->Is<type::Struct>()) {
       return GenerateTypeIfNeeded(ac->type());
     }
   }
@@ -2799,48 +2787,48 @@
 
   auto result = result_op();
   auto id = result.to_i();
-  if (auto* ac = type->As<ast::type::AccessControl>()) {
+  if (auto* ac = type->As<type::AccessControl>()) {
     // The non-struct case was handled above.
     auto* subtype = ac->type()->UnwrapIfNeeded();
-    if (!GenerateStructType(subtype->As<ast::type::Struct>(),
-                            ac->access_control(), result)) {
+    if (!GenerateStructType(subtype->As<type::Struct>(), ac->access_control(),
+                            result)) {
       return 0;
     }
-  } else if (auto* arr = type->As<ast::type::Array>()) {
+  } else if (auto* arr = type->As<type::Array>()) {
     if (!GenerateArrayType(arr, result)) {
       return 0;
     }
-  } else if (type->Is<ast::type::Bool>()) {
+  } else if (type->Is<type::Bool>()) {
     push_type(spv::Op::OpTypeBool, {result});
-  } else if (type->Is<ast::type::F32>()) {
+  } else if (type->Is<type::F32>()) {
     push_type(spv::Op::OpTypeFloat, {result, Operand::Int(32)});
-  } else if (type->Is<ast::type::I32>()) {
+  } else if (type->Is<type::I32>()) {
     push_type(spv::Op::OpTypeInt, {result, Operand::Int(32), Operand::Int(1)});
-  } else if (auto* mat = type->As<ast::type::Matrix>()) {
+  } else if (auto* mat = type->As<type::Matrix>()) {
     if (!GenerateMatrixType(mat, result)) {
       return 0;
     }
-  } else if (auto* ptr = type->As<ast::type::Pointer>()) {
+  } else if (auto* ptr = type->As<type::Pointer>()) {
     if (!GeneratePointerType(ptr, result)) {
       return 0;
     }
-  } else if (auto* str = type->As<ast::type::Struct>()) {
+  } else if (auto* str = type->As<type::Struct>()) {
     if (!GenerateStructType(str, ast::AccessControl::kReadWrite, result)) {
       return 0;
     }
-  } else if (type->Is<ast::type::U32>()) {
+  } else if (type->Is<type::U32>()) {
     push_type(spv::Op::OpTypeInt, {result, Operand::Int(32), Operand::Int(0)});
-  } else if (auto* vec = type->As<ast::type::Vector>()) {
+  } else if (auto* vec = type->As<type::Vector>()) {
     if (!GenerateVectorType(vec, result)) {
       return 0;
     }
-  } else if (type->Is<ast::type::Void>()) {
+  } else if (type->Is<type::Void>()) {
     push_type(spv::Op::OpTypeVoid, {result});
-  } else if (auto* tex = type->As<ast::type::Texture>()) {
+  } else if (auto* tex = type->As<type::Texture>()) {
     if (!GenerateTextureType(tex, result)) {
       return 0;
     }
-  } else if (type->Is<ast::type::Sampler>()) {
+  } else if (type->Is<type::Sampler>()) {
     push_type(spv::Op::OpTypeSampler, {result});
 
     // Register both of the sampler type names. In SPIR-V they're the same
@@ -2858,68 +2846,68 @@
 }
 
 // TODO(tommek): Cover multisampled textures here when they're included in AST
-bool Builder::GenerateTextureType(ast::type::Texture* texture,
+bool Builder::GenerateTextureType(type::Texture* texture,
                                   const Operand& result) {
   uint32_t array_literal = 0u;
   const auto dim = texture->dim();
-  if (dim == ast::type::TextureDimension::k1dArray ||
-      dim == ast::type::TextureDimension::k2dArray ||
-      dim == ast::type::TextureDimension::kCubeArray) {
+  if (dim == type::TextureDimension::k1dArray ||
+      dim == type::TextureDimension::k2dArray ||
+      dim == type::TextureDimension::kCubeArray) {
     array_literal = 1u;
   }
 
   uint32_t dim_literal = SpvDim2D;
-  if (dim == ast::type::TextureDimension::k1dArray ||
-      dim == ast::type::TextureDimension::k1d) {
+  if (dim == type::TextureDimension::k1dArray ||
+      dim == type::TextureDimension::k1d) {
     dim_literal = SpvDim1D;
-    if (texture->Is<ast::type::SampledTexture>()) {
+    if (texture->Is<type::SampledTexture>()) {
       push_capability(SpvCapabilitySampled1D);
     } else {
-      assert(texture->Is<ast::type::StorageTexture>());
+      assert(texture->Is<type::StorageTexture>());
       push_capability(SpvCapabilityImage1D);
     }
   }
-  if (dim == ast::type::TextureDimension::k3d) {
+  if (dim == type::TextureDimension::k3d) {
     dim_literal = SpvDim3D;
   }
-  if (dim == ast::type::TextureDimension::kCube ||
-      dim == ast::type::TextureDimension::kCubeArray) {
+  if (dim == type::TextureDimension::kCube ||
+      dim == type::TextureDimension::kCubeArray) {
     dim_literal = SpvDimCube;
   }
 
   uint32_t ms_literal = 0u;
-  if (texture->Is<ast::type::MultisampledTexture>()) {
+  if (texture->Is<type::MultisampledTexture>()) {
     ms_literal = 1u;
   }
 
   uint32_t depth_literal = 0u;
-  if (texture->Is<ast::type::DepthTexture>()) {
+  if (texture->Is<type::DepthTexture>()) {
     depth_literal = 1u;
   }
 
   uint32_t sampled_literal = 2u;
-  if (texture->Is<ast::type::MultisampledTexture>() ||
-      texture->Is<ast::type::SampledTexture>() ||
-      texture->Is<ast::type::DepthTexture>()) {
+  if (texture->Is<type::MultisampledTexture>() ||
+      texture->Is<type::SampledTexture>() ||
+      texture->Is<type::DepthTexture>()) {
     sampled_literal = 1u;
   }
 
-  if (dim == ast::type::TextureDimension::kCubeArray) {
-    if (texture->Is<ast::type::SampledTexture>() ||
-        texture->Is<ast::type::DepthTexture>()) {
+  if (dim == type::TextureDimension::kCubeArray) {
+    if (texture->Is<type::SampledTexture>() ||
+        texture->Is<type::DepthTexture>()) {
       push_capability(SpvCapabilitySampledCubeArray);
     }
   }
 
   uint32_t type_id = 0u;
-  if (texture->Is<ast::type::DepthTexture>()) {
-    ast::type::F32 f32;
+  if (texture->Is<type::DepthTexture>()) {
+    type::F32 f32;
     type_id = GenerateTypeIfNeeded(&f32);
-  } else if (auto* s = texture->As<ast::type::SampledTexture>()) {
+  } else if (auto* s = texture->As<type::SampledTexture>()) {
     type_id = GenerateTypeIfNeeded(s->type());
-  } else if (auto* ms = texture->As<ast::type::MultisampledTexture>()) {
+  } else if (auto* ms = texture->As<type::MultisampledTexture>()) {
     type_id = GenerateTypeIfNeeded(ms->type());
-  } else if (auto* st = texture->As<ast::type::StorageTexture>()) {
+  } else if (auto* st = texture->As<type::StorageTexture>()) {
     type_id = GenerateTypeIfNeeded(st->type());
   }
   if (type_id == 0u) {
@@ -2927,7 +2915,7 @@
   }
 
   uint32_t format_literal = SpvImageFormat_::SpvImageFormatUnknown;
-  if (auto* t = texture->As<ast::type::StorageTexture>()) {
+  if (auto* t = texture->As<type::StorageTexture>()) {
     format_literal = convert_image_format_to_spv(t->image_format());
   }
 
@@ -2940,7 +2928,7 @@
   return true;
 }
 
-bool Builder::GenerateArrayType(ast::type::Array* ary, const Operand& result) {
+bool Builder::GenerateArrayType(type::Array* ary, const Operand& result) {
   auto elem_type = GenerateTypeIfNeeded(ary->type());
   if (elem_type == 0) {
     return false;
@@ -2967,9 +2955,8 @@
   return true;
 }
 
-bool Builder::GenerateMatrixType(ast::type::Matrix* mat,
-                                 const Operand& result) {
-  ast::type::Vector col_type(mat->type(), mat->rows());
+bool Builder::GenerateMatrixType(type::Matrix* mat, const Operand& result) {
+  type::Vector col_type(mat->type(), mat->rows());
   auto col_type_id = GenerateTypeIfNeeded(&col_type);
   if (has_error()) {
     return false;
@@ -2980,8 +2967,7 @@
   return true;
 }
 
-bool Builder::GeneratePointerType(ast::type::Pointer* ptr,
-                                  const Operand& result) {
+bool Builder::GeneratePointerType(type::Pointer* ptr, const Operand& result) {
   auto pointee_id = GenerateTypeIfNeeded(ptr->type());
   if (pointee_id == 0) {
     return false;
@@ -2999,7 +2985,7 @@
   return true;
 }
 
-bool Builder::GenerateStructType(ast::type::Struct* struct_type,
+bool Builder::GenerateStructType(type::Struct* struct_type,
                                  ast::AccessControl access_control,
                                  const Operand& result) {
   auto struct_id = result.to_i();
@@ -3074,7 +3060,7 @@
       push_annot(spv::Op::OpMemberDecorate,
                  {Operand::Int(struct_id), Operand::Int(idx),
                   Operand::Int(SpvDecorationColMajor)});
-      if (!matrix_type->type()->Is<ast::type::F32>()) {
+      if (!matrix_type->type()->Is<type::F32>()) {
         error_ = "matrix scalar element type must be f32";
         return 0;
       }
@@ -3090,8 +3076,7 @@
   return GenerateTypeIfNeeded(member->type());
 }
 
-bool Builder::GenerateVectorType(ast::type::Vector* vec,
-                                 const Operand& result) {
+bool Builder::GenerateVectorType(type::Vector* vec, const Operand& result) {
   auto type_id = GenerateTypeIfNeeded(vec->type());
   if (has_error()) {
     return false;
@@ -3157,98 +3142,98 @@
 }
 
 SpvImageFormat Builder::convert_image_format_to_spv(
-    const ast::type::ImageFormat format) {
+    const type::ImageFormat format) {
   switch (format) {
-    case ast::type::ImageFormat::kR8Unorm:
+    case type::ImageFormat::kR8Unorm:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatR8;
-    case ast::type::ImageFormat::kR8Snorm:
+    case type::ImageFormat::kR8Snorm:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatR8Snorm;
-    case ast::type::ImageFormat::kR8Uint:
+    case type::ImageFormat::kR8Uint:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatR8ui;
-    case ast::type::ImageFormat::kR8Sint:
+    case type::ImageFormat::kR8Sint:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatR8i;
-    case ast::type::ImageFormat::kR16Uint:
+    case type::ImageFormat::kR16Uint:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatR16ui;
-    case ast::type::ImageFormat::kR16Sint:
+    case type::ImageFormat::kR16Sint:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatR16i;
-    case ast::type::ImageFormat::kR16Float:
+    case type::ImageFormat::kR16Float:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatR16f;
-    case ast::type::ImageFormat::kRg8Unorm:
+    case type::ImageFormat::kRg8Unorm:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatRg8;
-    case ast::type::ImageFormat::kRg8Snorm:
+    case type::ImageFormat::kRg8Snorm:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatRg8Snorm;
-    case ast::type::ImageFormat::kRg8Uint:
+    case type::ImageFormat::kRg8Uint:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatRg8ui;
-    case ast::type::ImageFormat::kRg8Sint:
+    case type::ImageFormat::kRg8Sint:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatRg8i;
-    case ast::type::ImageFormat::kR32Uint:
+    case type::ImageFormat::kR32Uint:
       return SpvImageFormatR32ui;
-    case ast::type::ImageFormat::kR32Sint:
+    case type::ImageFormat::kR32Sint:
       return SpvImageFormatR32i;
-    case ast::type::ImageFormat::kR32Float:
+    case type::ImageFormat::kR32Float:
       return SpvImageFormatR32f;
-    case ast::type::ImageFormat::kRg16Uint:
+    case type::ImageFormat::kRg16Uint:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatRg16ui;
-    case ast::type::ImageFormat::kRg16Sint:
+    case type::ImageFormat::kRg16Sint:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatRg16i;
-    case ast::type::ImageFormat::kRg16Float:
+    case type::ImageFormat::kRg16Float:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatRg16f;
-    case ast::type::ImageFormat::kRgba8Unorm:
+    case type::ImageFormat::kRgba8Unorm:
       return SpvImageFormatRgba8;
-    case ast::type::ImageFormat::kRgba8UnormSrgb:
+    case type::ImageFormat::kRgba8UnormSrgb:
       return SpvImageFormatUnknown;
-    case ast::type::ImageFormat::kRgba8Snorm:
+    case type::ImageFormat::kRgba8Snorm:
       return SpvImageFormatRgba8Snorm;
-    case ast::type::ImageFormat::kRgba8Uint:
+    case type::ImageFormat::kRgba8Uint:
       return SpvImageFormatRgba8ui;
-    case ast::type::ImageFormat::kRgba8Sint:
+    case type::ImageFormat::kRgba8Sint:
       return SpvImageFormatRgba8i;
-    case ast::type::ImageFormat::kBgra8Unorm:
+    case type::ImageFormat::kBgra8Unorm:
       return SpvImageFormatUnknown;
-    case ast::type::ImageFormat::kBgra8UnormSrgb:
+    case type::ImageFormat::kBgra8UnormSrgb:
       return SpvImageFormatUnknown;
-    case ast::type::ImageFormat::kRgb10A2Unorm:
+    case type::ImageFormat::kRgb10A2Unorm:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatRgb10A2;
-    case ast::type::ImageFormat::kRg11B10Float:
+    case type::ImageFormat::kRg11B10Float:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatR11fG11fB10f;
-    case ast::type::ImageFormat::kRg32Uint:
+    case type::ImageFormat::kRg32Uint:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatRg32ui;
-    case ast::type::ImageFormat::kRg32Sint:
+    case type::ImageFormat::kRg32Sint:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatRg32i;
-    case ast::type::ImageFormat::kRg32Float:
+    case type::ImageFormat::kRg32Float:
       push_capability(SpvCapabilityStorageImageExtendedFormats);
       return SpvImageFormatRg32f;
-    case ast::type::ImageFormat::kRgba16Uint:
+    case type::ImageFormat::kRgba16Uint:
       return SpvImageFormatRgba16ui;
-    case ast::type::ImageFormat::kRgba16Sint:
+    case type::ImageFormat::kRgba16Sint:
       return SpvImageFormatRgba16i;
-    case ast::type::ImageFormat::kRgba16Float:
+    case type::ImageFormat::kRgba16Float:
       return SpvImageFormatRgba16f;
-    case ast::type::ImageFormat::kRgba32Uint:
+    case type::ImageFormat::kRgba32Uint:
       return SpvImageFormatRgba32ui;
-    case ast::type::ImageFormat::kRgba32Sint:
+    case type::ImageFormat::kRgba32Sint:
       return SpvImageFormatRgba32i;
-    case ast::type::ImageFormat::kRgba32Float:
+    case type::ImageFormat::kRgba32Float:
       return SpvImageFormatRgba32f;
-    case ast::type::ImageFormat::kNone:
+    case type::ImageFormat::kNone:
       return SpvImageFormatUnknown;
   }
   return SpvImageFormatUnknown;
diff --git a/src/writer/spirv/builder.h b/src/writer/spirv/builder.h
index 6e0c446..9a76a0d 100644
--- a/src/writer/spirv/builder.h
+++ b/src/writer/spirv/builder.h
@@ -41,17 +41,17 @@
 #include "src/ast/return_statement.h"
 #include "src/ast/struct_member.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/ast/variable_decl_statement.h"
 #include "src/scope_stack.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/vector_type.h"
 #include "src/writer/spirv/function.h"
 #include "src/writer/spirv/instruction.h"
 
@@ -75,7 +75,7 @@
     uint32_t source_id;
     /// The type of the current chain source. This type matches the deduced
     /// result_type of the current source defined above.
-    ast::type::Type* source_type;
+    type::Type* source_type;
     /// A list of access chain indices to emit. Note, we _only_ have access
     /// chain indices if the source is pointer.
     std::vector<uint32_t> access_chain_indices;
@@ -269,7 +269,7 @@
   /// @param type the type to generate for
   /// @param struct_id the struct id
   /// @param member_idx the member index
-  void GenerateMemberAccessControlIfNeeded(ast::type::Type* type,
+  void GenerateMemberAccessControlIfNeeded(type::Type* type,
                                            uint32_t struct_id,
                                            uint32_t member_idx);
   /// Generates a function variable
@@ -373,7 +373,7 @@
   /// @param texture_operand the texture operand
   /// @param sampler_operand the sampler operand
   /// @returns the expression ID
-  uint32_t GenerateSampledImage(ast::type::Type* texture_type,
+  uint32_t GenerateSampledImage(type::Type* texture_type,
                                 Operand texture_operand,
                                 Operand sampler_operand);
   /// Generates a cast or object copy for the expression result,
@@ -382,7 +382,7 @@
   /// @param to_type the type we're casting too
   /// @param from_expr the expression to cast
   /// @returns the expression ID on success or 0 otherwise
-  uint32_t GenerateCastOrCopyOrPassthrough(ast::type::Type* to_type,
+  uint32_t GenerateCastOrCopyOrPassthrough(type::Type* to_type,
                                            ast::Expression* from_expr);
   /// Generates a loop statement
   /// @param stmt the statement to generate
@@ -414,7 +414,7 @@
   /// @param type the type to load
   /// @param id the variable id to load
   /// @returns the ID of the loaded value or `id` if type is not a pointer
-  uint32_t GenerateLoadIfNeeded(ast::type::Type* type, uint32_t id);
+  uint32_t GenerateLoadIfNeeded(type::Type* type, uint32_t id);
   /// Generates an OpStore. Emits an error and returns false if we're
   /// currently outside a function.
   /// @param to the ID to store too
@@ -424,33 +424,33 @@
   /// Generates a type if not already created
   /// @param type the type to create
   /// @returns the ID to use for the given type. Returns 0 on unknown type.
-  uint32_t GenerateTypeIfNeeded(ast::type::Type* type);
+  uint32_t GenerateTypeIfNeeded(type::Type* type);
   /// Generates a texture type declaration
   /// @param texture the texture to generate
   /// @param result the result operand
   /// @returns true if the texture was successfully generated
-  bool GenerateTextureType(ast::type::Texture* texture, const Operand& result);
+  bool GenerateTextureType(type::Texture* texture, const Operand& result);
   /// Generates an array type declaration
   /// @param ary the array to generate
   /// @param result the result operand
   /// @returns true if the array was successfully generated
-  bool GenerateArrayType(ast::type::Array* ary, const Operand& result);
+  bool GenerateArrayType(type::Array* ary, const Operand& result);
   /// Generates a matrix type declaration
   /// @param mat the matrix to generate
   /// @param result the result operand
   /// @returns true if the matrix was successfully generated
-  bool GenerateMatrixType(ast::type::Matrix* mat, const Operand& result);
+  bool GenerateMatrixType(type::Matrix* mat, const Operand& result);
   /// Generates a pointer type declaration
   /// @param ptr the pointer type to generate
   /// @param result the result operand
   /// @returns true if the pointer was successfully generated
-  bool GeneratePointerType(ast::type::Pointer* ptr, const Operand& result);
+  bool GeneratePointerType(type::Pointer* ptr, const Operand& result);
   /// Generates a vector type declaration
   /// @param struct_type the vector to generate
   /// @param access_control the access controls to assign to the struct
   /// @param result the result operand
   /// @returns true if the vector was successfully generated
-  bool GenerateStructType(ast::type::Struct* struct_type,
+  bool GenerateStructType(type::Struct* struct_type,
                           ast::AccessControl access_control,
                           const Operand& result);
   /// Generates a struct member
@@ -469,13 +469,12 @@
   /// @param vec the vector to generate
   /// @param result the result operand
   /// @returns true if the vector was successfully generated
-  bool GenerateVectorType(ast::type::Vector* vec, const Operand& result);
+  bool GenerateVectorType(type::Vector* vec, const Operand& result);
 
   /// Converts AST image format to SPIR-V and pushes an appropriate capability.
   /// @param format AST image format type
   /// @returns SPIR-V image format type
-  SpvImageFormat convert_image_format_to_spv(
-      const ast::type::ImageFormat format);
+  SpvImageFormat convert_image_format_to_spv(const type::ImageFormat format);
 
   /// Determines if the given type constructor is created from constant values
   /// @param expr the expression to check
diff --git a/src/writer/spirv/builder_accessor_expression_test.cc b/src/writer/spirv/builder_accessor_expression_test.cc
index 6fdd1c6..8159bff 100644
--- a/src/writer/spirv/builder_accessor_expression_test.cc
+++ b/src/writer/spirv/builder_accessor_expression_test.cc
@@ -24,15 +24,15 @@
 #include "src/ast/sint_literal.h"
 #include "src/ast/struct.h"
 #include "src/ast/struct_member.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/variable.h"
+#include "src/type/array_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
@@ -159,7 +159,7 @@
 }
 
 TEST_F(BuilderTest, ArrayAccessor_MultiLevel) {
-  ast::type::Array ary4(ty.vec3<f32>(), 4, ast::ArrayDecorationList{});
+  type::Array ary4(ty.vec3<f32>(), 4, ast::ArrayDecorationList{});
 
   // ary = array<vec3<f32>, 4>
   // ary[3][2];
@@ -197,7 +197,7 @@
 }
 
 TEST_F(BuilderTest, Accessor_ArrayWithSwizzle) {
-  ast::type::Array ary4(ty.vec3<f32>(), 4, ast::ArrayDecorationList{});
+  type::Array ary4(ty.vec3<f32>(), 4, ast::ArrayDecorationList{});
 
   // var a : array<vec3<f32>, 4>;
   // a[2].xy;
@@ -658,12 +658,12 @@
   s = create<ast::Struct>(ast::StructMemberList{Member("bar", c_type)},
                           ast::StructDecorationList{});
   auto* b_type = ty.struct_("B", s);
-  ast::type::Array b_ary_type(b_type, 3, ast::ArrayDecorationList{});
+  type::Array b_ary_type(b_type, 3, ast::ArrayDecorationList{});
   s = create<ast::Struct>(ast::StructMemberList{Member("foo", &b_ary_type)},
                           ast::StructDecorationList{});
   auto* a_type = ty.struct_("A", s);
 
-  ast::type::Array a_ary_type(a_type, 2, ast::ArrayDecorationList{});
+  type::Array a_ary_type(a_type, 2, ast::ArrayDecorationList{});
   auto* var = Var("index", ast::StorageClass::kFunction, &a_ary_type);
   auto* expr = MemberAccessor(
       MemberAccessor(
@@ -718,7 +718,7 @@
   //   vec2<f32>(0.5, -0.5));
   // pos[1]
 
-  ast::type::Array arr(ty.vec2<f32>(), 3, ast::ArrayDecorationList{});
+  type::Array arr(ty.vec2<f32>(), 3, ast::ArrayDecorationList{});
 
   auto* var = Const("pos", ast::StorageClass::kPrivate, &arr,
                     Construct(&arr, vec2<f32>(0.0f, 0.5f),
diff --git a/src/writer/spirv/builder_assign_test.cc b/src/writer/spirv/builder_assign_test.cc
index 463dbf7..040cac9 100644
--- a/src/writer/spirv/builder_assign_test.cc
+++ b/src/writer/spirv/builder_assign_test.cc
@@ -24,11 +24,11 @@
 #include "src/ast/sint_literal.h"
 #include "src/ast/struct.h"
 #include "src/ast/struct_member.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/vector_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
diff --git a/src/writer/spirv/builder_binary_expression_test.cc b/src/writer/spirv/builder_binary_expression_test.cc
index e614b51..8f2b5a8 100644
--- a/src/writer/spirv/builder_binary_expression_test.cc
+++ b/src/writer/spirv/builder_binary_expression_test.cc
@@ -21,14 +21,14 @@
 #include "src/ast/identifier_expression.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
diff --git a/src/writer/spirv/builder_bitcast_expression_test.cc b/src/writer/spirv/builder_bitcast_expression_test.cc
index e64aecf..2b0ba00 100644
--- a/src/writer/spirv/builder_bitcast_expression_test.cc
+++ b/src/writer/spirv/builder_bitcast_expression_test.cc
@@ -17,8 +17,8 @@
 #include "src/ast/float_literal.h"
 #include "src/ast/module.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/u32_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/u32_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
diff --git a/src/writer/spirv/builder_block_test.cc b/src/writer/spirv/builder_block_test.cc
index 70a08d0..e751849 100644
--- a/src/writer/spirv/builder_block_test.cc
+++ b/src/writer/spirv/builder_block_test.cc
@@ -20,8 +20,8 @@
 #include "src/ast/float_literal.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/type/f32_type.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/f32_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
diff --git a/src/writer/spirv/builder_call_test.cc b/src/writer/spirv/builder_call_test.cc
index 51d9e9f..e1cf83f 100644
--- a/src/writer/spirv/builder_call_test.cc
+++ b/src/writer/spirv/builder_call_test.cc
@@ -24,9 +24,9 @@
 #include "src/ast/return_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/void_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/void_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
diff --git a/src/writer/spirv/builder_constructor_expression_test.cc b/src/writer/spirv/builder_constructor_expression_test.cc
index 0b8c9e1..a4f675a 100644
--- a/src/writer/spirv/builder_constructor_expression_test.cc
+++ b/src/writer/spirv/builder_constructor_expression_test.cc
@@ -27,16 +27,16 @@
 #include "src/ast/struct.h"
 #include "src/ast/struct_decoration.h"
 #include "src/ast/struct_member.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
diff --git a/src/writer/spirv/builder_format_conversion_test.cc b/src/writer/spirv/builder_format_conversion_test.cc
index 4de15f4..0c9df47 100644
--- a/src/writer/spirv/builder_format_conversion_test.cc
+++ b/src/writer/spirv/builder_format_conversion_test.cc
@@ -23,7 +23,7 @@
 namespace {
 
 struct TestData {
-  ast::type::ImageFormat ast_format;
+  type::ImageFormat ast_format;
   SpvImageFormat_ spv_format;
   bool extended_format = false;
 };
@@ -51,46 +51,42 @@
     BuilderTest,
     ImageFormatConversionTest,
     testing::Values(
-        TestData{ast::type::ImageFormat::kR8Unorm, SpvImageFormatR8, true},
-        TestData{ast::type::ImageFormat::kR8Snorm, SpvImageFormatR8Snorm, true},
-        TestData{ast::type::ImageFormat::kR8Uint, SpvImageFormatR8ui, true},
-        TestData{ast::type::ImageFormat::kR8Sint, SpvImageFormatR8i, true},
-        TestData{ast::type::ImageFormat::kR16Uint, SpvImageFormatR16ui, true},
-        TestData{ast::type::ImageFormat::kR16Sint, SpvImageFormatR16i, true},
-        TestData{ast::type::ImageFormat::kR16Float, SpvImageFormatR16f, true},
-        TestData{ast::type::ImageFormat::kRg8Unorm, SpvImageFormatRg8, true},
-        TestData{ast::type::ImageFormat::kRg8Snorm, SpvImageFormatRg8Snorm,
+        TestData{type::ImageFormat::kR8Unorm, SpvImageFormatR8, true},
+        TestData{type::ImageFormat::kR8Snorm, SpvImageFormatR8Snorm, true},
+        TestData{type::ImageFormat::kR8Uint, SpvImageFormatR8ui, true},
+        TestData{type::ImageFormat::kR8Sint, SpvImageFormatR8i, true},
+        TestData{type::ImageFormat::kR16Uint, SpvImageFormatR16ui, true},
+        TestData{type::ImageFormat::kR16Sint, SpvImageFormatR16i, true},
+        TestData{type::ImageFormat::kR16Float, SpvImageFormatR16f, true},
+        TestData{type::ImageFormat::kRg8Unorm, SpvImageFormatRg8, true},
+        TestData{type::ImageFormat::kRg8Snorm, SpvImageFormatRg8Snorm, true},
+        TestData{type::ImageFormat::kRg8Uint, SpvImageFormatRg8ui, true},
+        TestData{type::ImageFormat::kRg8Sint, SpvImageFormatRg8i, true},
+        TestData{type::ImageFormat::kR32Uint, SpvImageFormatR32ui},
+        TestData{type::ImageFormat::kR32Sint, SpvImageFormatR32i},
+        TestData{type::ImageFormat::kR32Float, SpvImageFormatR32f},
+        TestData{type::ImageFormat::kRg16Uint, SpvImageFormatRg16ui, true},
+        TestData{type::ImageFormat::kRg16Sint, SpvImageFormatRg16i, true},
+        TestData{type::ImageFormat::kRg16Float, SpvImageFormatRg16f, true},
+        TestData{type::ImageFormat::kRgba8Unorm, SpvImageFormatRgba8},
+        TestData{type::ImageFormat::kRgba8UnormSrgb, SpvImageFormatUnknown},
+        TestData{type::ImageFormat::kRgba8Snorm, SpvImageFormatRgba8Snorm},
+        TestData{type::ImageFormat::kRgba8Uint, SpvImageFormatRgba8ui},
+        TestData{type::ImageFormat::kRgba8Sint, SpvImageFormatRgba8i},
+        TestData{type::ImageFormat::kBgra8Unorm, SpvImageFormatUnknown},
+        TestData{type::ImageFormat::kBgra8UnormSrgb, SpvImageFormatUnknown},
+        TestData{type::ImageFormat::kRgb10A2Unorm, SpvImageFormatRgb10A2, true},
+        TestData{type::ImageFormat::kRg11B10Float, SpvImageFormatR11fG11fB10f,
                  true},
-        TestData{ast::type::ImageFormat::kRg8Uint, SpvImageFormatRg8ui, true},
-        TestData{ast::type::ImageFormat::kRg8Sint, SpvImageFormatRg8i, true},
-        TestData{ast::type::ImageFormat::kR32Uint, SpvImageFormatR32ui},
-        TestData{ast::type::ImageFormat::kR32Sint, SpvImageFormatR32i},
-        TestData{ast::type::ImageFormat::kR32Float, SpvImageFormatR32f},
-        TestData{ast::type::ImageFormat::kRg16Uint, SpvImageFormatRg16ui, true},
-        TestData{ast::type::ImageFormat::kRg16Sint, SpvImageFormatRg16i, true},
-        TestData{ast::type::ImageFormat::kRg16Float, SpvImageFormatRg16f, true},
-        TestData{ast::type::ImageFormat::kRgba8Unorm, SpvImageFormatRgba8},
-        TestData{ast::type::ImageFormat::kRgba8UnormSrgb,
-                 SpvImageFormatUnknown},
-        TestData{ast::type::ImageFormat::kRgba8Snorm, SpvImageFormatRgba8Snorm},
-        TestData{ast::type::ImageFormat::kRgba8Uint, SpvImageFormatRgba8ui},
-        TestData{ast::type::ImageFormat::kRgba8Sint, SpvImageFormatRgba8i},
-        TestData{ast::type::ImageFormat::kBgra8Unorm, SpvImageFormatUnknown},
-        TestData{ast::type::ImageFormat::kBgra8UnormSrgb,
-                 SpvImageFormatUnknown},
-        TestData{ast::type::ImageFormat::kRgb10A2Unorm, SpvImageFormatRgb10A2,
-                 true},
-        TestData{ast::type::ImageFormat::kRg11B10Float,
-                 SpvImageFormatR11fG11fB10f, true},
-        TestData{ast::type::ImageFormat::kRg32Uint, SpvImageFormatRg32ui, true},
-        TestData{ast::type::ImageFormat::kRg32Sint, SpvImageFormatRg32i, true},
-        TestData{ast::type::ImageFormat::kRg32Float, SpvImageFormatRg32f, true},
-        TestData{ast::type::ImageFormat::kRgba16Uint, SpvImageFormatRgba16ui},
-        TestData{ast::type::ImageFormat::kRgba16Sint, SpvImageFormatRgba16i},
-        TestData{ast::type::ImageFormat::kRgba16Float, SpvImageFormatRgba16f},
-        TestData{ast::type::ImageFormat::kRgba32Uint, SpvImageFormatRgba32ui},
-        TestData{ast::type::ImageFormat::kRgba32Sint, SpvImageFormatRgba32i},
-        TestData{ast::type::ImageFormat::kRgba32Float, SpvImageFormatRgba32f}));
+        TestData{type::ImageFormat::kRg32Uint, SpvImageFormatRg32ui, true},
+        TestData{type::ImageFormat::kRg32Sint, SpvImageFormatRg32i, true},
+        TestData{type::ImageFormat::kRg32Float, SpvImageFormatRg32f, true},
+        TestData{type::ImageFormat::kRgba16Uint, SpvImageFormatRgba16ui},
+        TestData{type::ImageFormat::kRgba16Sint, SpvImageFormatRgba16i},
+        TestData{type::ImageFormat::kRgba16Float, SpvImageFormatRgba16f},
+        TestData{type::ImageFormat::kRgba32Uint, SpvImageFormatRgba32ui},
+        TestData{type::ImageFormat::kRgba32Sint, SpvImageFormatRgba32i},
+        TestData{type::ImageFormat::kRgba32Float, SpvImageFormatRgba32f}));
 
 }  // namespace
 }  // namespace spirv
diff --git a/src/writer/spirv/builder_function_test.cc b/src/writer/spirv/builder_function_test.cc
index 3c4c00d..cc04b1c 100644
--- a/src/writer/spirv/builder_function_test.cc
+++ b/src/writer/spirv/builder_function_test.cc
@@ -26,13 +26,13 @@
 #include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/access_control_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/void_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
@@ -217,7 +217,7 @@
       ast::StructMemberList{Member("d", ty.f32, {MemberOffset(0)})}, s_decos);
 
   auto* s = ty.struct_("Data", str);
-  ast::type::AccessControl ac(ast::AccessControl::kReadWrite, s);
+  type::AccessControl ac(ast::AccessControl::kReadWrite, s);
 
   auto* data_var = Var("data", ast::StorageClass::kStorage, &ac, nullptr,
                        ast::VariableDecorationList{
diff --git a/src/writer/spirv/builder_function_variable_test.cc b/src/writer/spirv/builder_function_variable_test.cc
index a113faa..21bccc5 100644
--- a/src/writer/spirv/builder_function_variable_test.cc
+++ b/src/writer/spirv/builder_function_variable_test.cc
@@ -25,10 +25,10 @@
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/storage_class.h"
 #include "src/ast/struct.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decoration.h"
diff --git a/src/writer/spirv/builder_global_variable_test.cc b/src/writer/spirv/builder_global_variable_test.cc
index 0a1cc4d..cb0184c 100644
--- a/src/writer/spirv/builder_global_variable_test.cc
+++ b/src/writer/spirv/builder_global_variable_test.cc
@@ -27,16 +27,16 @@
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/storage_class.h"
 #include "src/ast/struct.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decoration.h"
+#include "src/type/access_control_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
@@ -384,7 +384,7 @@
       "A", create<ast::Struct>(
                ast::StructMemberList{Member("a", ty.i32), Member("b", ty.i32)},
                ast::StructDecorationList{}));
-  ast::type::AccessControl ac{ast::AccessControl::kReadOnly, A};
+  type::AccessControl ac{ast::AccessControl::kReadOnly, A};
 
   auto* var = Var("b", ast::StorageClass::kStorage, &ac);
   EXPECT_TRUE(b.GenerateGlobalVariable(var)) << b.error();
@@ -415,7 +415,7 @@
       "A", create<ast::Struct>(ast::StructMemberList{Member("a", ty.i32)},
                                ast::StructDecorationList{}));
   auto* B = ty.alias("B", A);
-  ast::type::AccessControl ac{ast::AccessControl::kReadOnly, B};
+  type::AccessControl ac{ast::AccessControl::kReadOnly, B};
   auto* var = Var("b", ast::StorageClass::kStorage, &ac);
   EXPECT_TRUE(b.GenerateGlobalVariable(var)) << b.error();
 
@@ -442,7 +442,7 @@
   auto* A = ty.struct_(
       "A", create<ast::Struct>(ast::StructMemberList{Member("a", ty.i32)},
                                ast::StructDecorationList{}));
-  ast::type::AccessControl ac{ast::AccessControl::kReadOnly, A};
+  type::AccessControl ac{ast::AccessControl::kReadOnly, A};
   auto* B = ty.alias("B", &ac);
   auto* var = Var("b", ast::StorageClass::kStorage, B);
   EXPECT_TRUE(b.GenerateGlobalVariable(var)) << b.error();
@@ -470,8 +470,8 @@
   auto* A = ty.struct_(
       "A", create<ast::Struct>(ast::StructMemberList{Member("a", ty.i32)},
                                ast::StructDecorationList{}));
-  ast::type::AccessControl read{ast::AccessControl::kReadOnly, A};
-  ast::type::AccessControl rw{ast::AccessControl::kReadWrite, A};
+  type::AccessControl read{ast::AccessControl::kReadOnly, A};
+  type::AccessControl rw{ast::AccessControl::kReadWrite, A};
 
   auto* var_b = Var("b", ast::StorageClass::kStorage, &read);
   auto* var_c = Var("c", ast::StorageClass::kStorage, &rw);
@@ -500,11 +500,11 @@
 TEST_F(BuilderTest, GlobalVar_TextureStorageReadOnly) {
   // var<uniform_constant> a : [[access(read)]] texture_storage_2d<r32uint>;
 
-  ast::type::StorageTexture type(ast::type::TextureDimension::k2d,
-                                 ast::type::ImageFormat::kR32Uint);
+  type::StorageTexture type(type::TextureDimension::k2d,
+                            type::ImageFormat::kR32Uint);
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&type)) << td.error();
 
-  ast::type::AccessControl ac(ast::AccessControl::kReadOnly, &type);
+  type::AccessControl ac(ast::AccessControl::kReadOnly, &type);
 
   auto* var_a = Var("a", ast::StorageClass::kUniformConstant, &ac);
   EXPECT_TRUE(b.GenerateGlobalVariable(var_a)) << b.error();
@@ -521,11 +521,11 @@
 TEST_F(BuilderTest, GlobalVar_TextureStorageWriteOnly) {
   // var<uniform_constant> a : [[access(write)]] texture_storage_2d<r32uint>;
 
-  ast::type::StorageTexture type(ast::type::TextureDimension::k2d,
-                                 ast::type::ImageFormat::kR32Uint);
+  type::StorageTexture type(type::TextureDimension::k2d,
+                            type::ImageFormat::kR32Uint);
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&type)) << td.error();
 
-  ast::type::AccessControl ac(ast::AccessControl::kWriteOnly, &type);
+  type::AccessControl ac(ast::AccessControl::kWriteOnly, &type);
 
   auto* var_a = Var("a", ast::StorageClass::kUniformConstant, &ac);
   EXPECT_TRUE(b.GenerateGlobalVariable(var_a)) << b.error();
@@ -545,15 +545,15 @@
   // var<uniform_constant> a : [[access(read)]] texture_storage_2d<r32uint>;
   // var<uniform_constant> b : [[access(write)]] texture_storage_2d<r32uint>;
 
-  ast::type::StorageTexture st(ast::type::TextureDimension::k2d,
-                               ast::type::ImageFormat::kR32Uint);
+  type::StorageTexture st(type::TextureDimension::k2d,
+                          type::ImageFormat::kR32Uint);
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&st)) << td.error();
 
-  ast::type::AccessControl type_a(ast::AccessControl::kReadOnly, &st);
+  type::AccessControl type_a(ast::AccessControl::kReadOnly, &st);
   auto* var_a = Var("a", ast::StorageClass::kUniformConstant, &type_a);
   EXPECT_TRUE(b.GenerateGlobalVariable(var_a)) << b.error();
 
-  ast::type::AccessControl type_b(ast::AccessControl::kWriteOnly, &st);
+  type::AccessControl type_b(ast::AccessControl::kWriteOnly, &st);
   auto* var_b = Var("b", ast::StorageClass::kUniformConstant, &type_b);
   EXPECT_TRUE(b.GenerateGlobalVariable(var_b)) << b.error();
 
diff --git a/src/writer/spirv/builder_ident_expression_test.cc b/src/writer/spirv/builder_ident_expression_test.cc
index 453ef6b..083abb7 100644
--- a/src/writer/spirv/builder_ident_expression_test.cc
+++ b/src/writer/spirv/builder_ident_expression_test.cc
@@ -20,11 +20,11 @@
 #include "src/ast/identifier_expression.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/variable.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/vector_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
diff --git a/src/writer/spirv/builder_if_test.cc b/src/writer/spirv/builder_if_test.cc
index 25e03b8..f826e0a 100644
--- a/src/writer/spirv/builder_if_test.cc
+++ b/src/writer/spirv/builder_if_test.cc
@@ -26,8 +26,8 @@
 #include "src/ast/return_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/i32_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
diff --git a/src/writer/spirv/builder_intrinsic_test.cc b/src/writer/spirv/builder_intrinsic_test.cc
index 654317b..d1d7a8d 100644
--- a/src/writer/spirv/builder_intrinsic_test.cc
+++ b/src/writer/spirv/builder_intrinsic_test.cc
@@ -25,23 +25,23 @@
 #include "src/ast/sint_literal.h"
 #include "src/ast/struct.h"
 #include "src/ast/struct_member.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/variable.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
@@ -383,8 +383,8 @@
 
 // This tests that we do not push OpTypeSampledImage and float_0 type twice.
 TEST_F(IntrinsicBuilderTest, Call_TextureSampleCompare_Twice) {
-  ast::type::Sampler s(ast::type::SamplerKind::kComparisonSampler);
-  ast::type::DepthTexture t(ast::type::TextureDimension::k2d);
+  type::Sampler s(type::SamplerKind::kComparisonSampler);
+  type::DepthTexture t(type::TextureDimension::k2d);
 
   b.push_function(Function{});
 
diff --git a/src/writer/spirv/builder_intrinsic_texture_test.cc b/src/writer/spirv/builder_intrinsic_texture_test.cc
index 9c1e251..33f2259 100644
--- a/src/writer/spirv/builder_intrinsic_texture_test.cc
+++ b/src/writer/spirv/builder_intrinsic_texture_test.cc
@@ -20,10 +20,10 @@
 #include "src/ast/call_statement.h"
 #include "src/ast/intrinsic_texture_helper_test.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/storage_texture_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/storage_texture_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/binary_writer.h"
 #include "src/writer/spirv/builder.h"
diff --git a/src/writer/spirv/builder_literal_test.cc b/src/writer/spirv/builder_literal_test.cc
index b641b92..59d0757 100644
--- a/src/writer/spirv/builder_literal_test.cc
+++ b/src/writer/spirv/builder_literal_test.cc
@@ -18,11 +18,11 @@
 #include "src/ast/float_literal.h"
 #include "src/ast/literal.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/u32_type.h"
 #include "src/ast/uint_literal.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/u32_type.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
 #include "src/writer/spirv/test_helper.h"
diff --git a/src/writer/spirv/builder_loop_test.cc b/src/writer/spirv/builder_loop_test.cc
index b9cfb02..fc1141a 100644
--- a/src/writer/spirv/builder_loop_test.cc
+++ b/src/writer/spirv/builder_loop_test.cc
@@ -22,7 +22,7 @@
 #include "src/ast/loop_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
diff --git a/src/writer/spirv/builder_return_test.cc b/src/writer/spirv/builder_return_test.cc
index d3a55ff..017ac29 100644
--- a/src/writer/spirv/builder_return_test.cc
+++ b/src/writer/spirv/builder_return_test.cc
@@ -19,9 +19,9 @@
 #include "src/ast/identifier_expression.h"
 #include "src/ast/return_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/type_constructor_expression.h"
+#include "src/type/f32_type.h"
+#include "src/type/vector_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
diff --git a/src/writer/spirv/builder_switch_test.cc b/src/writer/spirv/builder_switch_test.cc
index 7150529..d320474 100644
--- a/src/writer/spirv/builder_switch_test.cc
+++ b/src/writer/spirv/builder_switch_test.cc
@@ -25,8 +25,8 @@
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/i32_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
diff --git a/src/writer/spirv/builder_type_test.cc b/src/writer/spirv/builder_type_test.cc
index b1cf1c0..756e885 100644
--- a/src/writer/spirv/builder_type_test.cc
+++ b/src/writer/spirv/builder_type_test.cc
@@ -21,24 +21,24 @@
 #include "src/ast/struct_block_decoration.h"
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/alias_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/texture_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/alias_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/texture_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
@@ -76,7 +76,7 @@
 }
 
 TEST_F(BuilderTest_Type, GenerateRuntimeArray) {
-  ast::type::Array ary(ty.i32, 0, ast::ArrayDecorationList{});
+  type::Array ary(ty.i32, 0, ast::ArrayDecorationList{});
   auto id = b.GenerateTypeIfNeeded(&ary);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(1u, id);
@@ -87,7 +87,7 @@
 }
 
 TEST_F(BuilderTest_Type, ReturnsGeneratedRuntimeArray) {
-  ast::type::Array ary(ty.i32, 0, ast::ArrayDecorationList{});
+  type::Array ary(ty.i32, 0, ast::ArrayDecorationList{});
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
@@ -99,7 +99,7 @@
 }
 
 TEST_F(BuilderTest_Type, GenerateArray) {
-  ast::type::Array ary(ty.i32, 4, ast::ArrayDecorationList{});
+  type::Array ary(ty.i32, 4, ast::ArrayDecorationList{});
   auto id = b.GenerateTypeIfNeeded(&ary);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(1u, id);
@@ -112,10 +112,10 @@
 }
 
 TEST_F(BuilderTest_Type, GenerateArray_WithStride) {
-  ast::type::Array ary(ty.i32, 4,
-                       ast::ArrayDecorationList{
-                           create<ast::StrideDecoration>(16u),
-                       });
+  type::Array ary(ty.i32, 4,
+                  ast::ArrayDecorationList{
+                      create<ast::StrideDecoration>(16u),
+                  });
 
   auto id = b.GenerateTypeIfNeeded(&ary);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -132,7 +132,7 @@
 }
 
 TEST_F(BuilderTest_Type, ReturnsGeneratedArray) {
-  ast::type::Array ary(ty.i32, 4, ast::ArrayDecorationList{});
+  type::Array ary(ty.i32, 4, ast::ArrayDecorationList{});
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
@@ -225,7 +225,7 @@
 }
 
 TEST_F(BuilderTest_Type, GeneratePtr) {
-  ast::type::Pointer ptr(ty.i32, ast::StorageClass::kOutput);
+  type::Pointer ptr(ty.i32, ast::StorageClass::kOutput);
   auto id = b.GenerateTypeIfNeeded(&ptr);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(1u, id);
@@ -236,7 +236,7 @@
 }
 
 TEST_F(BuilderTest_Type, ReturnsGeneratedPtr) {
-  ast::type::Pointer ptr(ty.i32, ast::StorageClass::kOutput);
+  type::Pointer ptr(ty.i32, ast::StorageClass::kOutput);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ptr), 1u);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ptr), 1u);
 }
@@ -391,15 +391,15 @@
   // We have to infer layout for matrix when it also has an offset.
   // The decoration goes on the struct member, even if the matrix is buried
   // in levels of arrays.
-  ast::type::Array arr_mat2x2(
-      ty.mat2x2<f32>(), 1, ast::ArrayDecorationList{});  // Singly nested array
+  type::Array arr_mat2x2(ty.mat2x2<f32>(), 1,
+                         ast::ArrayDecorationList{});  // Singly nested array
 
-  ast::type::Array arr_mat2x3(ty.mat2x3<f32>(), 1, ast::ArrayDecorationList{});
-  ast::type::Array arr_arr_mat2x3(
+  type::Array arr_mat2x3(ty.mat2x3<f32>(), 1, ast::ArrayDecorationList{});
+  type::Array arr_arr_mat2x3(
       ty.mat2x3<f32>(), 1, ast::ArrayDecorationList{});  // Doubly nested array
 
-  ast::type::Array rtarr_mat4x4(ty.mat4x4<f32>(), 0,
-                                ast::ArrayDecorationList{});  // Runtime array
+  type::Array rtarr_mat4x4(ty.mat4x4<f32>(), 0,
+                           ast::ArrayDecorationList{});  // Runtime array
 
   auto* s = create<ast::Struct>(
       ast::StructMemberList{Member("a", &arr_mat2x2, {MemberOffset(0)}),
@@ -533,7 +533,7 @@
         PtrData{ast::StorageClass::kFunction, SpvStorageClassFunction}));
 
 TEST_F(BuilderTest_Type, DepthTexture_Generate_2d) {
-  ast::type::DepthTexture two_d(ast::type::TextureDimension::k2d);
+  type::DepthTexture two_d(type::TextureDimension::k2d);
 
   auto id_two_d = b.GenerateTypeIfNeeded(&two_d);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -545,7 +545,7 @@
 }
 
 TEST_F(BuilderTest_Type, DepthTexture_Generate_2dArray) {
-  ast::type::DepthTexture two_d_array(ast::type::TextureDimension::k2dArray);
+  type::DepthTexture two_d_array(type::TextureDimension::k2dArray);
 
   auto id_two_d_array = b.GenerateTypeIfNeeded(&two_d_array);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -557,7 +557,7 @@
 }
 
 TEST_F(BuilderTest_Type, DepthTexture_Generate_Cube) {
-  ast::type::DepthTexture cube(ast::type::TextureDimension::kCube);
+  type::DepthTexture cube(type::TextureDimension::kCube);
 
   auto id_cube = b.GenerateTypeIfNeeded(&cube);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -570,7 +570,7 @@
 }
 
 TEST_F(BuilderTest_Type, DepthTexture_Generate_CubeArray) {
-  ast::type::DepthTexture cube_array(ast::type::TextureDimension::kCubeArray);
+  type::DepthTexture cube_array(type::TextureDimension::kCubeArray);
 
   auto id_cube_array = b.GenerateTypeIfNeeded(&cube_array);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -585,7 +585,7 @@
 }
 
 TEST_F(BuilderTest_Type, MultisampledTexture_Generate_2d_i32) {
-  ast::type::MultisampledTexture ms(ast::type::TextureDimension::k2d, ty.i32);
+  type::MultisampledTexture ms(type::TextureDimension::k2d, ty.i32);
 
   EXPECT_EQ(1u, b.GenerateTypeIfNeeded(&ms));
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -595,7 +595,7 @@
 }
 
 TEST_F(BuilderTest_Type, MultisampledTexture_Generate_2d_u32) {
-  ast::type::MultisampledTexture ms(ast::type::TextureDimension::k2d, ty.u32);
+  type::MultisampledTexture ms(type::TextureDimension::k2d, ty.u32);
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ms), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -606,7 +606,7 @@
 }
 
 TEST_F(BuilderTest_Type, MultisampledTexture_Generate_2d_f32) {
-  ast::type::MultisampledTexture ms(ast::type::TextureDimension::k2d, ty.f32);
+  type::MultisampledTexture ms(type::TextureDimension::k2d, ty.f32);
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ms), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -617,7 +617,7 @@
 }
 
 TEST_F(BuilderTest_Type, SampledTexture_Generate_1d_i32) {
-  ast::type::SampledTexture s(ast::type::TextureDimension::k1d, ty.i32);
+  type::SampledTexture s(type::TextureDimension::k1d, ty.i32);
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -632,7 +632,7 @@
 }
 
 TEST_F(BuilderTest_Type, SampledTexture_Generate_1d_u32) {
-  ast::type::SampledTexture s(ast::type::TextureDimension::k1d, ty.u32);
+  type::SampledTexture s(type::TextureDimension::k1d, ty.u32);
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -647,7 +647,7 @@
 }
 
 TEST_F(BuilderTest_Type, SampledTexture_Generate_1d_f32) {
-  ast::type::SampledTexture s(ast::type::TextureDimension::k1d, ty.f32);
+  type::SampledTexture s(type::TextureDimension::k1d, ty.f32);
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -662,7 +662,7 @@
 }
 
 TEST_F(BuilderTest_Type, SampledTexture_Generate_1dArray) {
-  ast::type::SampledTexture s(ast::type::TextureDimension::k1dArray, ty.f32);
+  type::SampledTexture s(type::TextureDimension::k1dArray, ty.f32);
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -677,7 +677,7 @@
 }
 
 TEST_F(BuilderTest_Type, SampledTexture_Generate_2d) {
-  ast::type::SampledTexture s(ast::type::TextureDimension::k2d, ty.f32);
+  type::SampledTexture s(type::TextureDimension::k2d, ty.f32);
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -688,7 +688,7 @@
 }
 
 TEST_F(BuilderTest_Type, SampledTexture_Generate_2d_array) {
-  ast::type::SampledTexture s(ast::type::TextureDimension::k2dArray, ty.f32);
+  type::SampledTexture s(type::TextureDimension::k2dArray, ty.f32);
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -699,7 +699,7 @@
 }
 
 TEST_F(BuilderTest_Type, SampledTexture_Generate_3d) {
-  ast::type::SampledTexture s(ast::type::TextureDimension::k3d, ty.f32);
+  type::SampledTexture s(type::TextureDimension::k3d, ty.f32);
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -710,7 +710,7 @@
 }
 
 TEST_F(BuilderTest_Type, SampledTexture_Generate_Cube) {
-  ast::type::SampledTexture s(ast::type::TextureDimension::kCube, ty.f32);
+  type::SampledTexture s(type::TextureDimension::kCube, ty.f32);
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -722,7 +722,7 @@
 }
 
 TEST_F(BuilderTest_Type, SampledTexture_Generate_CubeArray) {
-  ast::type::SampledTexture s(ast::type::TextureDimension::kCubeArray, ty.f32);
+  type::SampledTexture s(type::TextureDimension::kCubeArray, ty.f32);
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -736,8 +736,8 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_1d_R16Float) {
-  ast::type::StorageTexture s(ast::type::TextureDimension::k1d,
-                              ast::type::ImageFormat::kR16Float);
+  type::StorageTexture s(type::TextureDimension::k1d,
+                         type::ImageFormat::kR16Float);
 
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&s)) << td.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
@@ -753,8 +753,8 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_1d_R8SNorm) {
-  ast::type::StorageTexture s(ast::type::TextureDimension::k1d,
-                              ast::type::ImageFormat::kR8Snorm);
+  type::StorageTexture s(type::TextureDimension::k1d,
+                         type::ImageFormat::kR8Snorm);
 
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&s)) << td.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
@@ -770,8 +770,8 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_1d_R8UNorm) {
-  ast::type::StorageTexture s(ast::type::TextureDimension::k1d,
-                              ast::type::ImageFormat::kR8Unorm);
+  type::StorageTexture s(type::TextureDimension::k1d,
+                         type::ImageFormat::kR8Unorm);
 
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&s)) << td.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
@@ -787,8 +787,8 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_1d_R8Uint) {
-  ast::type::StorageTexture s(ast::type::TextureDimension::k1d,
-                              ast::type::ImageFormat::kR8Uint);
+  type::StorageTexture s(type::TextureDimension::k1d,
+                         type::ImageFormat::kR8Uint);
 
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&s)) << td.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
@@ -799,8 +799,8 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_1d_R8Sint) {
-  ast::type::StorageTexture s(ast::type::TextureDimension::k1d,
-                              ast::type::ImageFormat::kR8Sint);
+  type::StorageTexture s(type::TextureDimension::k1d,
+                         type::ImageFormat::kR8Sint);
 
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&s)) << td.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
@@ -811,8 +811,8 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_1d_array) {
-  ast::type::StorageTexture s(ast::type::TextureDimension::k1dArray,
-                              ast::type::ImageFormat::kR16Float);
+  type::StorageTexture s(type::TextureDimension::k1dArray,
+                         type::ImageFormat::kR16Float);
 
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&s)) << td.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
@@ -828,8 +828,8 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_2d) {
-  ast::type::StorageTexture s(ast::type::TextureDimension::k2d,
-                              ast::type::ImageFormat::kR16Float);
+  type::StorageTexture s(type::TextureDimension::k2d,
+                         type::ImageFormat::kR16Float);
 
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&s)) << td.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
@@ -840,8 +840,8 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_2dArray) {
-  ast::type::StorageTexture s(ast::type::TextureDimension::k2dArray,
-                              ast::type::ImageFormat::kR16Float);
+  type::StorageTexture s(type::TextureDimension::k2dArray,
+                         type::ImageFormat::kR16Float);
 
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&s)) << td.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
@@ -852,8 +852,8 @@
 }
 
 TEST_F(BuilderTest_Type, StorageTexture_Generate_3d) {
-  ast::type::StorageTexture s(ast::type::TextureDimension::k3d,
-                              ast::type::ImageFormat::kR16Float);
+  type::StorageTexture s(type::TextureDimension::k3d,
+                         type::ImageFormat::kR16Float);
 
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&s)) << td.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
@@ -865,8 +865,8 @@
 
 TEST_F(BuilderTest_Type,
        StorageTexture_Generate_SampledTypeFloat_Format_r32float) {
-  ast::type::StorageTexture s(ast::type::TextureDimension::k2d,
-                              ast::type::ImageFormat::kR32Float);
+  type::StorageTexture s(type::TextureDimension::k2d,
+                         type::ImageFormat::kR32Float);
 
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&s)) << td.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
@@ -878,8 +878,8 @@
 
 TEST_F(BuilderTest_Type,
        StorageTexture_Generate_SampledTypeSint_Format_r32sint) {
-  ast::type::StorageTexture s(ast::type::TextureDimension::k2d,
-                              ast::type::ImageFormat::kR32Sint);
+  type::StorageTexture s(type::TextureDimension::k2d,
+                         type::ImageFormat::kR32Sint);
 
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&s)) << td.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
@@ -891,8 +891,8 @@
 
 TEST_F(BuilderTest_Type,
        StorageTexture_Generate_SampledTypeUint_Format_r32uint) {
-  ast::type::StorageTexture s(ast::type::TextureDimension::k2d,
-                              ast::type::ImageFormat::kR32Uint);
+  type::StorageTexture s(type::TextureDimension::k2d,
+                         type::ImageFormat::kR32Uint);
 
   ASSERT_TRUE(td.DetermineStorageTextureSubtype(&s)) << td.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
@@ -903,24 +903,24 @@
 }
 
 TEST_F(BuilderTest_Type, Sampler) {
-  ast::type::Sampler sampler(ast::type::SamplerKind::kSampler);
+  type::Sampler sampler(type::SamplerKind::kSampler);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&sampler), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), "%1 = OpTypeSampler\n");
 }
 
 TEST_F(BuilderTest_Type, ComparisonSampler) {
-  ast::type::Sampler sampler(ast::type::SamplerKind::kComparisonSampler);
+  type::Sampler sampler(type::SamplerKind::kComparisonSampler);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&sampler), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), "%1 = OpTypeSampler\n");
 }
 
 TEST_F(BuilderTest_Type, Dedup_Sampler_And_ComparisonSampler) {
-  ast::type::Sampler comp_sampler(ast::type::SamplerKind::kComparisonSampler);
+  type::Sampler comp_sampler(type::SamplerKind::kComparisonSampler);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&comp_sampler), 1u);
 
-  ast::type::Sampler sampler(ast::type::SamplerKind::kSampler);
+  type::Sampler sampler(type::SamplerKind::kSampler);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&sampler), 1u);
 
   ASSERT_FALSE(b.has_error()) << b.error();
diff --git a/src/writer/spirv/builder_unary_op_expression_test.cc b/src/writer/spirv/builder_unary_op_expression_test.cc
index 5fc830b..409994c 100644
--- a/src/writer/spirv/builder_unary_op_expression_test.cc
+++ b/src/writer/spirv/builder_unary_op_expression_test.cc
@@ -20,10 +20,10 @@
 #include "src/ast/identifier_expression.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/vector_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/vector_type.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/type_determiner.h"
 #include "src/writer/spirv/builder.h"
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index a0f2c6c..c395c60 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -50,28 +50,28 @@
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_offset_decoration.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
 #include "src/ast/workgroup_decoration.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/writer/float_to_string.h"
 
 namespace tint {
@@ -172,15 +172,15 @@
   return true;
 }
 
-bool GeneratorImpl::EmitConstructedType(const ast::type::Type* ty) {
+bool GeneratorImpl::EmitConstructedType(const type::Type* ty) {
   make_indent();
-  if (auto* alias = ty->As<ast::type::Alias>()) {
+  if (auto* alias = ty->As<type::Alias>()) {
     out_ << "type " << module_.SymbolToName(alias->symbol()) << " = ";
     if (!EmitType(alias->type())) {
       return false;
     }
     out_ << ";" << std::endl;
-  } else if (auto* str = ty->As<ast::type::Struct>()) {
+  } else if (auto* str = ty->As<type::Struct>()) {
     if (!EmitStructType(str)) {
       return false;
     }
@@ -387,9 +387,9 @@
   return EmitBlockAndNewline(func->body());
 }
 
-bool GeneratorImpl::EmitImageFormat(const ast::type::ImageFormat fmt) {
+bool GeneratorImpl::EmitImageFormat(const type::ImageFormat fmt) {
   switch (fmt) {
-    case ast::type::ImageFormat::kNone:
+    case type::ImageFormat::kNone:
       error_ = "unknown image format";
       return false;
     default:
@@ -398,9 +398,9 @@
   return true;
 }
 
-bool GeneratorImpl::EmitType(ast::type::Type* type) {
+bool GeneratorImpl::EmitType(type::Type* type) {
   std::string storage_texture_access = "";
-  if (auto* ac = type->As<ast::type::AccessControl>()) {
+  if (auto* ac = type->As<type::AccessControl>()) {
     out_ << "[[access(";
     if (ac->IsReadOnly()) {
       out_ << "read";
@@ -417,9 +417,9 @@
       return false;
     }
     return true;
-  } else if (auto* alias = type->As<ast::type::Alias>()) {
+  } else if (auto* alias = type->As<type::Alias>()) {
     out_ << module_.SymbolToName(alias->symbol());
-  } else if (auto* ary = type->As<ast::type::Array>()) {
+  } else if (auto* ary = type->As<type::Array>()) {
     for (auto* deco : ary->decorations()) {
       if (auto* stride = deco->As<ast::StrideDecoration>()) {
         out_ << "[[stride(" << stride->stride() << ")]] ";
@@ -435,43 +435,43 @@
       out_ << ", " << ary->size();
 
     out_ << ">";
-  } else if (type->Is<ast::type::Bool>()) {
+  } else if (type->Is<type::Bool>()) {
     out_ << "bool";
-  } else if (type->Is<ast::type::F32>()) {
+  } else if (type->Is<type::F32>()) {
     out_ << "f32";
-  } else if (type->Is<ast::type::I32>()) {
+  } else if (type->Is<type::I32>()) {
     out_ << "i32";
-  } else if (auto* mat = type->As<ast::type::Matrix>()) {
+  } else if (auto* mat = type->As<type::Matrix>()) {
     out_ << "mat" << mat->columns() << "x" << mat->rows() << "<";
     if (!EmitType(mat->type())) {
       return false;
     }
     out_ << ">";
-  } else if (auto* ptr = type->As<ast::type::Pointer>()) {
+  } else if (auto* ptr = type->As<type::Pointer>()) {
     out_ << "ptr<" << ptr->storage_class() << ", ";
     if (!EmitType(ptr->type())) {
       return false;
     }
     out_ << ">";
-  } else if (auto* sampler = type->As<ast::type::Sampler>()) {
+  } else if (auto* sampler = type->As<type::Sampler>()) {
     out_ << "sampler";
 
     if (sampler->IsComparison()) {
       out_ << "_comparison";
     }
-  } else if (auto* str = type->As<ast::type::Struct>()) {
+  } else if (auto* str = type->As<type::Struct>()) {
     // The struct, as a type, is just the name. We should have already emitted
     // the declaration through a call to |EmitStructType| earlier.
     out_ << module_.SymbolToName(str->symbol());
-  } else if (auto* texture = type->As<ast::type::Texture>()) {
+  } else if (auto* texture = type->As<type::Texture>()) {
     out_ << "texture_";
-    if (texture->Is<ast::type::DepthTexture>()) {
+    if (texture->Is<type::DepthTexture>()) {
       out_ << "depth_";
-    } else if (texture->Is<ast::type::SampledTexture>()) {
+    } else if (texture->Is<type::SampledTexture>()) {
       /* nothing to emit */
-    } else if (texture->Is<ast::type::MultisampledTexture>()) {
+    } else if (texture->Is<type::MultisampledTexture>()) {
       out_ << "multisampled_";
-    } else if (texture->Is<ast::type::StorageTexture>()) {
+    } else if (texture->Is<type::StorageTexture>()) {
       out_ << "storage_";
     } else {
       error_ = "unknown texture type";
@@ -479,25 +479,25 @@
     }
 
     switch (texture->dim()) {
-      case ast::type::TextureDimension::k1d:
+      case type::TextureDimension::k1d:
         out_ << "1d";
         break;
-      case ast::type::TextureDimension::k1dArray:
+      case type::TextureDimension::k1dArray:
         out_ << "1d_array";
         break;
-      case ast::type::TextureDimension::k2d:
+      case type::TextureDimension::k2d:
         out_ << "2d";
         break;
-      case ast::type::TextureDimension::k2dArray:
+      case type::TextureDimension::k2dArray:
         out_ << "2d_array";
         break;
-      case ast::type::TextureDimension::k3d:
+      case type::TextureDimension::k3d:
         out_ << "3d";
         break;
-      case ast::type::TextureDimension::kCube:
+      case type::TextureDimension::kCube:
         out_ << "cube";
         break;
-      case ast::type::TextureDimension::kCubeArray:
+      case type::TextureDimension::kCubeArray:
         out_ << "cube_array";
         break;
       default:
@@ -505,19 +505,19 @@
         return false;
     }
 
-    if (auto* sampled = texture->As<ast::type::SampledTexture>()) {
+    if (auto* sampled = texture->As<type::SampledTexture>()) {
       out_ << "<";
       if (!EmitType(sampled->type())) {
         return false;
       }
       out_ << ">";
-    } else if (auto* ms = texture->As<ast::type::MultisampledTexture>()) {
+    } else if (auto* ms = texture->As<type::MultisampledTexture>()) {
       out_ << "<";
       if (!EmitType(ms->type())) {
         return false;
       }
       out_ << ">";
-    } else if (auto* storage = texture->As<ast::type::StorageTexture>()) {
+    } else if (auto* storage = texture->As<type::StorageTexture>()) {
       out_ << "<";
       if (!EmitImageFormat(storage->image_format())) {
         return false;
@@ -525,15 +525,15 @@
       out_ << ">";
     }
 
-  } else if (type->Is<ast::type::U32>()) {
+  } else if (type->Is<type::U32>()) {
     out_ << "u32";
-  } else if (auto* vec = type->As<ast::type::Vector>()) {
+  } else if (auto* vec = type->As<type::Vector>()) {
     out_ << "vec" << vec->size() << "<";
     if (!EmitType(vec->type())) {
       return false;
     }
     out_ << ">";
-  } else if (type->Is<ast::type::Void>()) {
+  } else if (type->Is<type::Void>()) {
     out_ << "void";
   } else {
     error_ = "unknown type in EmitType: " + type->type_name();
@@ -543,7 +543,7 @@
   return true;
 }
 
-bool GeneratorImpl::EmitStructType(const ast::type::Struct* str) {
+bool GeneratorImpl::EmitStructType(const type::Struct* str) {
   auto* impl = str->impl();
   for (auto* deco : impl->decorations()) {
     out_ << "[[";
diff --git a/src/writer/wgsl/generator_impl.h b/src/writer/wgsl/generator_impl.h
index 9b25e82..1b3d568 100644
--- a/src/writer/wgsl/generator_impl.h
+++ b/src/writer/wgsl/generator_impl.h
@@ -37,12 +37,12 @@
 #include "src/ast/return_statement.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/ast/variable.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/type.h"
 #include "src/writer/text_generator.h"
 
 namespace tint {
@@ -70,7 +70,7 @@
   /// Handles generating a constructed type
   /// @param ty the constructed to generate
   /// @returns true if the constructed was emitted
-  bool EmitConstructedType(const ast::type::Type* ty);
+  bool EmitConstructedType(const type::Type* ty);
   /// Handles an array accessor expression
   /// @param expr the expression to emit
   /// @returns true if the array accessor was emitted
@@ -178,15 +178,15 @@
   /// Handles generating type
   /// @param type the type to generate
   /// @returns true if the type is emitted
-  bool EmitType(ast::type::Type* type);
+  bool EmitType(type::Type* type);
   /// Handles generating a struct declaration
   /// @param str the struct
   /// @returns true if the struct is emitted
-  bool EmitStructType(const ast::type::Struct* str);
+  bool EmitStructType(const type::Struct* str);
   /// Handles emitting an image format
   /// @param fmt the format to generate
   /// @returns true if the format is emitted
-  bool EmitImageFormat(const ast::type::ImageFormat fmt);
+  bool EmitImageFormat(const type::ImageFormat fmt);
   /// Handles emitting a type constructor
   /// @param expr the type constructor expression
   /// @returns true if the constructor is emitted
diff --git a/src/writer/wgsl/generator_impl_alias_type_test.cc b/src/writer/wgsl/generator_impl_alias_type_test.cc
index d1813ad..fc158a1 100644
--- a/src/writer/wgsl/generator_impl_alias_type_test.cc
+++ b/src/writer/wgsl/generator_impl_alias_type_test.cc
@@ -16,7 +16,7 @@
 #include "src/ast/struct.h"
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_decoration.h"
-#include "src/ast/type/struct_type.h"
+#include "src/type/struct_type.h"
 #include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
diff --git a/src/writer/wgsl/generator_impl_array_accessor_test.cc b/src/writer/wgsl/generator_impl_array_accessor_test.cc
index 2d8a85d..6a3e208 100644
--- a/src/writer/wgsl/generator_impl_array_accessor_test.cc
+++ b/src/writer/wgsl/generator_impl_array_accessor_test.cc
@@ -19,7 +19,7 @@
 #include "src/ast/identifier_expression.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 #include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
diff --git a/src/writer/wgsl/generator_impl_bitcast_test.cc b/src/writer/wgsl/generator_impl_bitcast_test.cc
index 01c6d5e..7441780 100644
--- a/src/writer/wgsl/generator_impl_bitcast_test.cc
+++ b/src/writer/wgsl/generator_impl_bitcast_test.cc
@@ -17,7 +17,7 @@
 #include "gtest/gtest.h"
 #include "src/ast/bitcast_expression.h"
 #include "src/ast/identifier_expression.h"
-#include "src/ast/type/f32_type.h"
+#include "src/type/f32_type.h"
 #include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
diff --git a/src/writer/wgsl/generator_impl_case_test.cc b/src/writer/wgsl/generator_impl_case_test.cc
index ff2f393..cd52219 100644
--- a/src/writer/wgsl/generator_impl_case_test.cc
+++ b/src/writer/wgsl/generator_impl_case_test.cc
@@ -19,7 +19,7 @@
 #include "src/ast/case_statement.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 #include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
diff --git a/src/writer/wgsl/generator_impl_cast_test.cc b/src/writer/wgsl/generator_impl_cast_test.cc
index b90a7a1..ff2881b 100644
--- a/src/writer/wgsl/generator_impl_cast_test.cc
+++ b/src/writer/wgsl/generator_impl_cast_test.cc
@@ -16,8 +16,8 @@
 
 #include "gtest/gtest.h"
 #include "src/ast/identifier_expression.h"
-#include "src/ast/type/f32_type.h"
 #include "src/ast/type_constructor_expression.h"
+#include "src/type/f32_type.h"
 #include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
diff --git a/src/writer/wgsl/generator_impl_constructor_test.cc b/src/writer/wgsl/generator_impl_constructor_test.cc
index 31a577e..4705802 100644
--- a/src/writer/wgsl/generator_impl_constructor_test.cc
+++ b/src/writer/wgsl/generator_impl_constructor_test.cc
@@ -17,14 +17,14 @@
 #include "src/ast/float_literal.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
 #include "src/ast/uint_literal.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
 #include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
diff --git a/src/writer/wgsl/generator_impl_function_test.cc b/src/writer/wgsl/generator_impl_function_test.cc
index c8f4b86..21844c6 100644
--- a/src/writer/wgsl/generator_impl_function_test.cc
+++ b/src/writer/wgsl/generator_impl_function_test.cc
@@ -22,13 +22,13 @@
 #include "src/ast/stage_decoration.h"
 #include "src/ast/struct_block_decoration.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/void_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
 #include "src/ast/workgroup_decoration.h"
+#include "src/type/access_control_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/void_type.h"
 #include "src/type_determiner.h"
 #include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
@@ -172,7 +172,7 @@
       ast::StructMemberList{Member("d", ty.f32, {MemberOffset(0)})}, s_decos);
 
   auto* s = ty.struct_("Data", str);
-  ast::type::AccessControl ac(ast::AccessControl::kReadWrite, s);
+  type::AccessControl ac(ast::AccessControl::kReadWrite, s);
 
   auto* data_var = Var("data", ast::StorageClass::kStorage, &ac, nullptr,
                        ast::VariableDecorationList{
diff --git a/src/writer/wgsl/generator_impl_switch_test.cc b/src/writer/wgsl/generator_impl_switch_test.cc
index 602fe51..48b2b83 100644
--- a/src/writer/wgsl/generator_impl_switch_test.cc
+++ b/src/writer/wgsl/generator_impl_switch_test.cc
@@ -20,7 +20,7 @@
 #include "src/ast/identifier_expression.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type/i32_type.h"
+#include "src/type/i32_type.h"
 #include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
diff --git a/src/writer/wgsl/generator_impl_test.cc b/src/writer/wgsl/generator_impl_test.cc
index 37f080a..c3661d5 100644
--- a/src/writer/wgsl/generator_impl_test.cc
+++ b/src/writer/wgsl/generator_impl_test.cc
@@ -19,7 +19,7 @@
 #include "gtest/gtest.h"
 #include "src/ast/function.h"
 #include "src/ast/module.h"
-#include "src/ast/type/void_type.h"
+#include "src/type/void_type.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_type_test.cc b/src/writer/wgsl/generator_impl_type_test.cc
index cff995d..f67e8eb 100644
--- a/src/writer/wgsl/generator_impl_type_test.cc
+++ b/src/writer/wgsl/generator_impl_type_test.cc
@@ -21,22 +21,22 @@
 #include "src/ast/struct_member.h"
 #include "src/ast/struct_member_decoration.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type/access_control_type.h"
-#include "src/ast/type/array_type.h"
-#include "src/ast/type/bool_type.h"
-#include "src/ast/type/depth_texture_type.h"
-#include "src/ast/type/f32_type.h"
-#include "src/ast/type/i32_type.h"
-#include "src/ast/type/matrix_type.h"
-#include "src/ast/type/multisampled_texture_type.h"
-#include "src/ast/type/pointer_type.h"
-#include "src/ast/type/sampled_texture_type.h"
-#include "src/ast/type/sampler_type.h"
-#include "src/ast/type/storage_texture_type.h"
-#include "src/ast/type/struct_type.h"
-#include "src/ast/type/u32_type.h"
-#include "src/ast/type/vector_type.h"
-#include "src/ast/type/void_type.h"
+#include "src/type/access_control_type.h"
+#include "src/type/array_type.h"
+#include "src/type/bool_type.h"
+#include "src/type/depth_texture_type.h"
+#include "src/type/f32_type.h"
+#include "src/type/i32_type.h"
+#include "src/type/matrix_type.h"
+#include "src/type/multisampled_texture_type.h"
+#include "src/type/pointer_type.h"
+#include "src/type/sampled_texture_type.h"
+#include "src/type/sampler_type.h"
+#include "src/type/storage_texture_type.h"
+#include "src/type/struct_type.h"
+#include "src/type/u32_type.h"
+#include "src/type/vector_type.h"
+#include "src/type/void_type.h"
 #include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
@@ -68,7 +68,7 @@
       create<ast::Struct>(ast::StructMemberList{Member("a", ty.i32)}, decos);
   auto* s = ty.struct_("S", str);
 
-  ast::type::AccessControl a(ast::AccessControl::kReadOnly, s);
+  type::AccessControl a(ast::AccessControl::kReadOnly, s);
 
   ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
   EXPECT_EQ(gen.result(), "[[access(read)]]\nS");
@@ -83,35 +83,35 @@
       create<ast::Struct>(ast::StructMemberList{Member("a", ty.i32)}, decos);
   auto* s = ty.struct_("S", str);
 
-  ast::type::AccessControl a(ast::AccessControl::kReadWrite, s);
+  type::AccessControl a(ast::AccessControl::kReadWrite, s);
 
   ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
   EXPECT_EQ(gen.result(), "[[access(read_write)]]\nS");
 }
 
 TEST_F(WgslGeneratorImplTest, EmitType_Array_Decoration) {
-  ast::type::Array a(ty.bool_, 4,
-                     ast::ArrayDecorationList{
-                         create<ast::StrideDecoration>(16u),
-                     });
+  type::Array a(ty.bool_, 4,
+                ast::ArrayDecorationList{
+                    create<ast::StrideDecoration>(16u),
+                });
 
   ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
   EXPECT_EQ(gen.result(), "[[stride(16)]] array<bool, 4>");
 }
 
 TEST_F(WgslGeneratorImplTest, EmitType_Array_MultipleDecorations) {
-  ast::type::Array a(ty.bool_, 4,
-                     ast::ArrayDecorationList{
-                         create<ast::StrideDecoration>(16u),
-                         create<ast::StrideDecoration>(32u),
-                     });
+  type::Array a(ty.bool_, 4,
+                ast::ArrayDecorationList{
+                    create<ast::StrideDecoration>(16u),
+                    create<ast::StrideDecoration>(32u),
+                });
 
   ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
   EXPECT_EQ(gen.result(), "[[stride(16)]] [[stride(32)]] array<bool, 4>");
 }
 
 TEST_F(WgslGeneratorImplTest, EmitType_RuntimeArray) {
-  ast::type::Array a(ty.bool_, 0, ast::ArrayDecorationList{});
+  type::Array a(ty.bool_, 0, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
   EXPECT_EQ(gen.result(), "array<bool>");
@@ -138,7 +138,7 @@
 }
 
 TEST_F(WgslGeneratorImplTest, EmitType_Pointer) {
-  ast::type::Pointer p(ty.f32, ast::StorageClass::kWorkgroup);
+  type::Pointer p(ty.f32, ast::StorageClass::kWorkgroup);
 
   ASSERT_TRUE(gen.EmitType(&p)) << gen.error();
   EXPECT_EQ(gen.result(), "ptr<workgroup, f32>");
@@ -207,7 +207,7 @@
 }
 
 struct TextureData {
-  ast::type::TextureDimension dim;
+  type::TextureDimension dim;
   const char* name;
 };
 inline std::ostream& operator<<(std::ostream& out, TextureData data) {
@@ -219,7 +219,7 @@
 TEST_P(WgslGenerator_DepthTextureTest, EmitType_DepthTexture) {
   auto param = GetParam();
 
-  ast::type::DepthTexture d(param.dim);
+  type::DepthTexture d(param.dim);
 
   ASSERT_TRUE(gen.EmitType(&d)) << gen.error();
   EXPECT_EQ(gen.result(), param.name);
@@ -228,18 +228,17 @@
     WgslGeneratorImplTest,
     WgslGenerator_DepthTextureTest,
     testing::Values(
-        TextureData{ast::type::TextureDimension::k2d, "texture_depth_2d"},
-        TextureData{ast::type::TextureDimension::k2dArray,
-                    "texture_depth_2d_array"},
-        TextureData{ast::type::TextureDimension::kCube, "texture_depth_cube"},
-        TextureData{ast::type::TextureDimension::kCubeArray,
+        TextureData{type::TextureDimension::k2d, "texture_depth_2d"},
+        TextureData{type::TextureDimension::k2dArray, "texture_depth_2d_array"},
+        TextureData{type::TextureDimension::kCube, "texture_depth_cube"},
+        TextureData{type::TextureDimension::kCubeArray,
                     "texture_depth_cube_array"}));
 
 using WgslGenerator_SampledTextureTest = TestParamHelper<TextureData>;
 TEST_P(WgslGenerator_SampledTextureTest, EmitType_SampledTexture_F32) {
   auto param = GetParam();
 
-  ast::type::SampledTexture t(param.dim, ty.f32);
+  type::SampledTexture t(param.dim, ty.f32);
 
   ASSERT_TRUE(gen.EmitType(&t)) << gen.error();
   EXPECT_EQ(gen.result(), std::string(param.name) + "<f32>");
@@ -248,7 +247,7 @@
 TEST_P(WgslGenerator_SampledTextureTest, EmitType_SampledTexture_I32) {
   auto param = GetParam();
 
-  ast::type::SampledTexture t(param.dim, ty.i32);
+  type::SampledTexture t(param.dim, ty.i32);
 
   ASSERT_TRUE(gen.EmitType(&t)) << gen.error();
   EXPECT_EQ(gen.result(), std::string(param.name) + "<i32>");
@@ -257,7 +256,7 @@
 TEST_P(WgslGenerator_SampledTextureTest, EmitType_SampledTexture_U32) {
   auto param = GetParam();
 
-  ast::type::SampledTexture t(param.dim, ty.u32);
+  type::SampledTexture t(param.dim, ty.u32);
 
   ASSERT_TRUE(gen.EmitType(&t)) << gen.error();
   EXPECT_EQ(gen.result(), std::string(param.name) + "<u32>");
@@ -266,20 +265,19 @@
     WgslGeneratorImplTest,
     WgslGenerator_SampledTextureTest,
     testing::Values(
-        TextureData{ast::type::TextureDimension::k1d, "texture_1d"},
-        TextureData{ast::type::TextureDimension::k1dArray, "texture_1d_array"},
-        TextureData{ast::type::TextureDimension::k2d, "texture_2d"},
-        TextureData{ast::type::TextureDimension::k2dArray, "texture_2d_array"},
-        TextureData{ast::type::TextureDimension::k3d, "texture_3d"},
-        TextureData{ast::type::TextureDimension::kCube, "texture_cube"},
-        TextureData{ast::type::TextureDimension::kCubeArray,
-                    "texture_cube_array"}));
+        TextureData{type::TextureDimension::k1d, "texture_1d"},
+        TextureData{type::TextureDimension::k1dArray, "texture_1d_array"},
+        TextureData{type::TextureDimension::k2d, "texture_2d"},
+        TextureData{type::TextureDimension::k2dArray, "texture_2d_array"},
+        TextureData{type::TextureDimension::k3d, "texture_3d"},
+        TextureData{type::TextureDimension::kCube, "texture_cube"},
+        TextureData{type::TextureDimension::kCubeArray, "texture_cube_array"}));
 
 using WgslGenerator_MultiampledTextureTest = TestParamHelper<TextureData>;
 TEST_P(WgslGenerator_MultiampledTextureTest, EmitType_MultisampledTexture_F32) {
   auto param = GetParam();
 
-  ast::type::MultisampledTexture t(param.dim, ty.f32);
+  type::MultisampledTexture t(param.dim, ty.f32);
 
   ASSERT_TRUE(gen.EmitType(&t)) << gen.error();
   EXPECT_EQ(gen.result(), std::string(param.name) + "<f32>");
@@ -288,7 +286,7 @@
 TEST_P(WgslGenerator_MultiampledTextureTest, EmitType_MultisampledTexture_I32) {
   auto param = GetParam();
 
-  ast::type::MultisampledTexture t(param.dim, ty.i32);
+  type::MultisampledTexture t(param.dim, ty.i32);
 
   ASSERT_TRUE(gen.EmitType(&t)) << gen.error();
   EXPECT_EQ(gen.result(), std::string(param.name) + "<i32>");
@@ -297,7 +295,7 @@
 TEST_P(WgslGenerator_MultiampledTextureTest, EmitType_MultisampledTexture_U32) {
   auto param = GetParam();
 
-  ast::type::MultisampledTexture t(param.dim, ty.u32);
+  type::MultisampledTexture t(param.dim, ty.u32);
 
   ASSERT_TRUE(gen.EmitType(&t)) << gen.error();
   EXPECT_EQ(gen.result(), std::string(param.name) + "<u32>");
@@ -305,12 +303,12 @@
 INSTANTIATE_TEST_SUITE_P(WgslGeneratorImplTest,
                          WgslGenerator_MultiampledTextureTest,
                          testing::Values(TextureData{
-                             ast::type::TextureDimension::k2d,
+                             type::TextureDimension::k2d,
                              "texture_multisampled_2d"}));
 
 struct StorageTextureData {
-  ast::type::ImageFormat fmt;
-  ast::type::TextureDimension dim;
+  type::ImageFormat fmt;
+  type::TextureDimension dim;
   ast::AccessControl access;
   const char* name;
 };
@@ -322,8 +320,8 @@
 TEST_P(WgslGenerator_StorageTextureTest, EmitType_StorageTexture) {
   auto param = GetParam();
 
-  ast::type::StorageTexture t(param.dim, param.fmt);
-  ast::type::AccessControl ac(param.access, &t);
+  type::StorageTexture t(param.dim, param.fmt);
+  type::AccessControl ac(param.access, &t);
 
   ASSERT_TRUE(gen.EmitType(&ac)) << gen.error();
   EXPECT_EQ(gen.result(), param.name);
@@ -332,53 +330,49 @@
     WgslGeneratorImplTest,
     WgslGenerator_StorageTextureTest,
     testing::Values(
-        StorageTextureData{ast::type::ImageFormat::kR8Unorm,
-                           ast::type::TextureDimension::k1d,
+        StorageTextureData{type::ImageFormat::kR8Unorm,
+                           type::TextureDimension::k1d,
                            ast::AccessControl::kReadOnly,
                            "[[access(read)]]\ntexture_storage_1d<r8unorm>"},
         StorageTextureData{
-            ast::type::ImageFormat::kR8Unorm,
-            ast::type::TextureDimension::k1dArray,
+            type::ImageFormat::kR8Unorm, type::TextureDimension::k1dArray,
             ast::AccessControl::kReadOnly,
             "[[access(read)]]\ntexture_storage_1d_array<r8unorm>"},
-        StorageTextureData{ast::type::ImageFormat::kR8Unorm,
-                           ast::type::TextureDimension::k2d,
+        StorageTextureData{type::ImageFormat::kR8Unorm,
+                           type::TextureDimension::k2d,
                            ast::AccessControl::kReadOnly,
                            "[[access(read)]]\ntexture_storage_2d<r8unorm>"},
         StorageTextureData{
-            ast::type::ImageFormat::kR8Unorm,
-            ast::type::TextureDimension::k2dArray,
+            type::ImageFormat::kR8Unorm, type::TextureDimension::k2dArray,
             ast::AccessControl::kReadOnly,
             "[[access(read)]]\ntexture_storage_2d_array<r8unorm>"},
-        StorageTextureData{ast::type::ImageFormat::kR8Unorm,
-                           ast::type::TextureDimension::k3d,
+        StorageTextureData{type::ImageFormat::kR8Unorm,
+                           type::TextureDimension::k3d,
                            ast::AccessControl::kReadOnly,
                            "[[access(read)]]\ntexture_storage_3d<r8unorm>"},
-        StorageTextureData{ast::type::ImageFormat::kR8Unorm,
-                           ast::type::TextureDimension::k1d,
+        StorageTextureData{type::ImageFormat::kR8Unorm,
+                           type::TextureDimension::k1d,
                            ast::AccessControl::kWriteOnly,
                            "[[access(write)]]\ntexture_storage_1d<r8unorm>"},
         StorageTextureData{
-            ast::type::ImageFormat::kR8Unorm,
-            ast::type::TextureDimension::k1dArray,
+            type::ImageFormat::kR8Unorm, type::TextureDimension::k1dArray,
             ast::AccessControl::kWriteOnly,
             "[[access(write)]]\ntexture_storage_1d_array<r8unorm>"},
-        StorageTextureData{ast::type::ImageFormat::kR8Unorm,
-                           ast::type::TextureDimension::k2d,
+        StorageTextureData{type::ImageFormat::kR8Unorm,
+                           type::TextureDimension::k2d,
                            ast::AccessControl::kWriteOnly,
                            "[[access(write)]]\ntexture_storage_2d<r8unorm>"},
         StorageTextureData{
-            ast::type::ImageFormat::kR8Unorm,
-            ast::type::TextureDimension::k2dArray,
+            type::ImageFormat::kR8Unorm, type::TextureDimension::k2dArray,
             ast::AccessControl::kWriteOnly,
             "[[access(write)]]\ntexture_storage_2d_array<r8unorm>"},
-        StorageTextureData{ast::type::ImageFormat::kR8Unorm,
-                           ast::type::TextureDimension::k3d,
+        StorageTextureData{type::ImageFormat::kR8Unorm,
+                           type::TextureDimension::k3d,
                            ast::AccessControl::kWriteOnly,
                            "[[access(write)]]\ntexture_storage_3d<r8unorm>"}));
 
 struct ImageFormatData {
-  ast::type::ImageFormat fmt;
+  type::ImageFormat fmt;
   const char* name;
 };
 inline std::ostream& operator<<(std::ostream& out, ImageFormatData data) {
@@ -397,53 +391,51 @@
     WgslGeneratorImplTest,
     WgslGenerator_ImageFormatTest,
     testing::Values(
-        ImageFormatData{ast::type::ImageFormat::kR8Unorm, "r8unorm"},
-        ImageFormatData{ast::type::ImageFormat::kR8Snorm, "r8snorm"},
-        ImageFormatData{ast::type::ImageFormat::kR8Uint, "r8uint"},
-        ImageFormatData{ast::type::ImageFormat::kR8Sint, "r8sint"},
-        ImageFormatData{ast::type::ImageFormat::kR16Uint, "r16uint"},
-        ImageFormatData{ast::type::ImageFormat::kR16Sint, "r16sint"},
-        ImageFormatData{ast::type::ImageFormat::kR16Float, "r16float"},
-        ImageFormatData{ast::type::ImageFormat::kRg8Unorm, "rg8unorm"},
-        ImageFormatData{ast::type::ImageFormat::kRg8Snorm, "rg8snorm"},
-        ImageFormatData{ast::type::ImageFormat::kRg8Uint, "rg8uint"},
-        ImageFormatData{ast::type::ImageFormat::kRg8Sint, "rg8sint"},
-        ImageFormatData{ast::type::ImageFormat::kR32Uint, "r32uint"},
-        ImageFormatData{ast::type::ImageFormat::kR32Sint, "r32sint"},
-        ImageFormatData{ast::type::ImageFormat::kR32Float, "r32float"},
-        ImageFormatData{ast::type::ImageFormat::kRg16Uint, "rg16uint"},
-        ImageFormatData{ast::type::ImageFormat::kRg16Sint, "rg16sint"},
-        ImageFormatData{ast::type::ImageFormat::kRg16Float, "rg16float"},
-        ImageFormatData{ast::type::ImageFormat::kRgba8Unorm, "rgba8unorm"},
-        ImageFormatData{ast::type::ImageFormat::kRgba8UnormSrgb,
-                        "rgba8unorm_srgb"},
-        ImageFormatData{ast::type::ImageFormat::kRgba8Snorm, "rgba8snorm"},
-        ImageFormatData{ast::type::ImageFormat::kRgba8Uint, "rgba8uint"},
-        ImageFormatData{ast::type::ImageFormat::kRgba8Sint, "rgba8sint"},
-        ImageFormatData{ast::type::ImageFormat::kBgra8Unorm, "bgra8unorm"},
-        ImageFormatData{ast::type::ImageFormat::kBgra8UnormSrgb,
-                        "bgra8unorm_srgb"},
-        ImageFormatData{ast::type::ImageFormat::kRgb10A2Unorm, "rgb10a2unorm"},
-        ImageFormatData{ast::type::ImageFormat::kRg11B10Float, "rg11b10float"},
-        ImageFormatData{ast::type::ImageFormat::kRg32Uint, "rg32uint"},
-        ImageFormatData{ast::type::ImageFormat::kRg32Sint, "rg32sint"},
-        ImageFormatData{ast::type::ImageFormat::kRg32Float, "rg32float"},
-        ImageFormatData{ast::type::ImageFormat::kRgba16Uint, "rgba16uint"},
-        ImageFormatData{ast::type::ImageFormat::kRgba16Sint, "rgba16sint"},
-        ImageFormatData{ast::type::ImageFormat::kRgba16Float, "rgba16float"},
-        ImageFormatData{ast::type::ImageFormat::kRgba32Uint, "rgba32uint"},
-        ImageFormatData{ast::type::ImageFormat::kRgba32Sint, "rgba32sint"},
-        ImageFormatData{ast::type::ImageFormat::kRgba32Float, "rgba32float"}));
+        ImageFormatData{type::ImageFormat::kR8Unorm, "r8unorm"},
+        ImageFormatData{type::ImageFormat::kR8Snorm, "r8snorm"},
+        ImageFormatData{type::ImageFormat::kR8Uint, "r8uint"},
+        ImageFormatData{type::ImageFormat::kR8Sint, "r8sint"},
+        ImageFormatData{type::ImageFormat::kR16Uint, "r16uint"},
+        ImageFormatData{type::ImageFormat::kR16Sint, "r16sint"},
+        ImageFormatData{type::ImageFormat::kR16Float, "r16float"},
+        ImageFormatData{type::ImageFormat::kRg8Unorm, "rg8unorm"},
+        ImageFormatData{type::ImageFormat::kRg8Snorm, "rg8snorm"},
+        ImageFormatData{type::ImageFormat::kRg8Uint, "rg8uint"},
+        ImageFormatData{type::ImageFormat::kRg8Sint, "rg8sint"},
+        ImageFormatData{type::ImageFormat::kR32Uint, "r32uint"},
+        ImageFormatData{type::ImageFormat::kR32Sint, "r32sint"},
+        ImageFormatData{type::ImageFormat::kR32Float, "r32float"},
+        ImageFormatData{type::ImageFormat::kRg16Uint, "rg16uint"},
+        ImageFormatData{type::ImageFormat::kRg16Sint, "rg16sint"},
+        ImageFormatData{type::ImageFormat::kRg16Float, "rg16float"},
+        ImageFormatData{type::ImageFormat::kRgba8Unorm, "rgba8unorm"},
+        ImageFormatData{type::ImageFormat::kRgba8UnormSrgb, "rgba8unorm_srgb"},
+        ImageFormatData{type::ImageFormat::kRgba8Snorm, "rgba8snorm"},
+        ImageFormatData{type::ImageFormat::kRgba8Uint, "rgba8uint"},
+        ImageFormatData{type::ImageFormat::kRgba8Sint, "rgba8sint"},
+        ImageFormatData{type::ImageFormat::kBgra8Unorm, "bgra8unorm"},
+        ImageFormatData{type::ImageFormat::kBgra8UnormSrgb, "bgra8unorm_srgb"},
+        ImageFormatData{type::ImageFormat::kRgb10A2Unorm, "rgb10a2unorm"},
+        ImageFormatData{type::ImageFormat::kRg11B10Float, "rg11b10float"},
+        ImageFormatData{type::ImageFormat::kRg32Uint, "rg32uint"},
+        ImageFormatData{type::ImageFormat::kRg32Sint, "rg32sint"},
+        ImageFormatData{type::ImageFormat::kRg32Float, "rg32float"},
+        ImageFormatData{type::ImageFormat::kRgba16Uint, "rgba16uint"},
+        ImageFormatData{type::ImageFormat::kRgba16Sint, "rgba16sint"},
+        ImageFormatData{type::ImageFormat::kRgba16Float, "rgba16float"},
+        ImageFormatData{type::ImageFormat::kRgba32Uint, "rgba32uint"},
+        ImageFormatData{type::ImageFormat::kRgba32Sint, "rgba32sint"},
+        ImageFormatData{type::ImageFormat::kRgba32Float, "rgba32float"}));
 
 TEST_F(WgslGeneratorImplTest, EmitType_Sampler) {
-  ast::type::Sampler sampler(ast::type::SamplerKind::kSampler);
+  type::Sampler sampler(type::SamplerKind::kSampler);
 
   ASSERT_TRUE(gen.EmitType(&sampler)) << gen.error();
   EXPECT_EQ(gen.result(), "sampler");
 }
 
 TEST_F(WgslGeneratorImplTest, EmitType_SamplerComparison) {
-  ast::type::Sampler sampler(ast::type::SamplerKind::kComparisonSampler);
+  type::Sampler sampler(type::SamplerKind::kComparisonSampler);
 
   ASSERT_TRUE(gen.EmitType(&sampler)) << gen.error();
   EXPECT_EQ(gen.result(), "sampler_comparison");
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 3071b8c..c1c3229 100644
--- a/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc
@@ -17,9 +17,9 @@
 
 #include "gtest/gtest.h"
 #include "src/ast/identifier_expression.h"
-#include "src/ast/type/f32_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
+#include "src/type/f32_type.h"
 #include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
diff --git a/src/writer/wgsl/generator_impl_variable_test.cc b/src/writer/wgsl/generator_impl_variable_test.cc
index 501c880..9a8e9fc 100644
--- a/src/writer/wgsl/generator_impl_variable_test.cc
+++ b/src/writer/wgsl/generator_impl_variable_test.cc
@@ -20,9 +20,9 @@
 #include "src/ast/constant_id_decoration.h"
 #include "src/ast/group_decoration.h"
 #include "src/ast/location_decoration.h"
-#include "src/ast/type/f32_type.h"
 #include "src/ast/variable.h"
 #include "src/ast/variable_decoration.h"
+#include "src/type/f32_type.h"
 #include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
