Remove all unnecessary includes

All includes from .cc to .h are preserved, even when transitively included.

It's clear that there are far too many includes in header files, and we should be more aggressive with forward declarations. tint:532 will continue to track this work.

There are, however, plenty of includes that have accumulated over time which are no longer required directly or transitively, so this change starts with a clean slate of *required* includes.

Bug: tint:532
Change-Id: Ie1718dad565f8309fa180ef91bcf3920e76dba18
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/44042
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
diff --git a/src/ast/access_decoration.cc b/src/ast/access_decoration.cc
index ed90ddc..b01c44b 100644
--- a/src/ast/access_decoration.cc
+++ b/src/ast/access_decoration.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/access_decoration.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::AccessDecoration);
diff --git a/src/ast/access_decoration.h b/src/ast/access_decoration.h
index 507b8f3..9b77f2b 100644
--- a/src/ast/access_decoration.h
+++ b/src/ast/access_decoration.h
@@ -15,8 +15,6 @@
 #ifndef SRC_AST_ACCESS_DECORATION_H_
 #define SRC_AST_ACCESS_DECORATION_H_
 
-#include <stddef.h>
-
 #include "src/ast/access_control.h"
 #include "src/ast/type_decoration.h"
 
diff --git a/src/ast/access_decoration_test.cc b/src/ast/access_decoration_test.cc
index 31b6e3d..7fde9f7 100644
--- a/src/ast/access_decoration_test.cc
+++ b/src/ast/access_decoration_test.cc
@@ -14,8 +14,6 @@
 
 #include "src/ast/access_decoration.h"
 
-#include <sstream>
-
 #include "src/ast/test_helper.h"
 
 namespace tint {
diff --git a/src/ast/array_accessor_expression.cc b/src/ast/array_accessor_expression.cc
index f82337f..934055e 100644
--- a/src/ast/array_accessor_expression.cc
+++ b/src/ast/array_accessor_expression.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/array_accessor_expression.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::ArrayAccessorExpression);
diff --git a/src/ast/array_accessor_expression.h b/src/ast/array_accessor_expression.h
index 81dae4b..f6e8f1e 100644
--- a/src/ast/array_accessor_expression.h
+++ b/src/ast/array_accessor_expression.h
@@ -15,11 +15,7 @@
 #ifndef SRC_AST_ARRAY_ACCESSOR_EXPRESSION_H_
 #define SRC_AST_ARRAY_ACCESSOR_EXPRESSION_H_
 
-#include <memory>
-#include <utility>
-
 #include "src/ast/expression.h"
-#include "src/ast/literal.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/array_accessor_expression_test.cc b/src/ast/array_accessor_expression_test.cc
index fbe3efd..671ec98 100644
--- a/src/ast/array_accessor_expression_test.cc
+++ b/src/ast/array_accessor_expression_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/array_accessor_expression.h"
-
-#include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
 
 namespace tint {
diff --git a/src/ast/array_decoration.cc b/src/ast/array_decoration.cc
index 1da02af..9241f96 100644
--- a/src/ast/array_decoration.cc
+++ b/src/ast/array_decoration.cc
@@ -14,10 +14,6 @@
 
 #include "src/ast/array_decoration.h"
 
-#include <assert.h>
-
-#include "src/ast/stride_decoration.h"
-
 TINT_INSTANTIATE_TYPEINFO(tint::ast::ArrayDecoration);
 
 namespace tint {
diff --git a/src/ast/assignment_statement.cc b/src/ast/assignment_statement.cc
index f382948..3230499 100644
--- a/src/ast/assignment_statement.cc
+++ b/src/ast/assignment_statement.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/assignment_statement.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::AssignmentStatement);
diff --git a/src/ast/assignment_statement.h b/src/ast/assignment_statement.h
index b803775..4368ee7 100644
--- a/src/ast/assignment_statement.h
+++ b/src/ast/assignment_statement.h
@@ -15,11 +15,7 @@
 #ifndef SRC_AST_ASSIGNMENT_STATEMENT_H_
 #define SRC_AST_ASSIGNMENT_STATEMENT_H_
 
-#include <memory>
-#include <utility>
-
 #include "src/ast/expression.h"
-#include "src/ast/literal.h"
 #include "src/ast/statement.h"
 
 namespace tint {
diff --git a/src/ast/assignment_statement_test.cc b/src/ast/assignment_statement_test.cc
index 046e3cd..3a0234f 100644
--- a/src/ast/assignment_statement_test.cc
+++ b/src/ast/assignment_statement_test.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/assignment_statement.h"
 
-#include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
 
 namespace tint {
diff --git a/src/ast/binary_expression.cc b/src/ast/binary_expression.cc
index a430e18..83fbaac 100644
--- a/src/ast/binary_expression.cc
+++ b/src/ast/binary_expression.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/binary_expression.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::BinaryExpression);
diff --git a/src/ast/binary_expression.h b/src/ast/binary_expression.h
index f026443..036eb5a 100644
--- a/src/ast/binary_expression.h
+++ b/src/ast/binary_expression.h
@@ -15,11 +15,7 @@
 #ifndef SRC_AST_BINARY_EXPRESSION_H_
 #define SRC_AST_BINARY_EXPRESSION_H_
 
-#include <memory>
-#include <utility>
-
 #include "src/ast/expression.h"
-#include "src/ast/literal.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/binary_expression_test.cc b/src/ast/binary_expression_test.cc
index d37435c..045231e 100644
--- a/src/ast/binary_expression_test.cc
+++ b/src/ast/binary_expression_test.cc
@@ -12,11 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/binary_expression.h"
-
-#include <sstream>
-
-#include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
 
 namespace tint {
diff --git a/src/ast/binding_decoration.cc b/src/ast/binding_decoration.cc
index b96c2aa..3a385f6 100644
--- a/src/ast/binding_decoration.cc
+++ b/src/ast/binding_decoration.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/binding_decoration.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::BindingDecoration);
diff --git a/src/ast/binding_decoration.h b/src/ast/binding_decoration.h
index cae0042..08107ff 100644
--- a/src/ast/binding_decoration.h
+++ b/src/ast/binding_decoration.h
@@ -15,8 +15,6 @@
 #ifndef SRC_AST_BINDING_DECORATION_H_
 #define SRC_AST_BINDING_DECORATION_H_
 
-#include <stddef.h>
-
 #include "src/ast/variable_decoration.h"
 
 namespace tint {
diff --git a/src/ast/binding_decoration_test.cc b/src/ast/binding_decoration_test.cc
index 1d4a08f..8f32660 100644
--- a/src/ast/binding_decoration_test.cc
+++ b/src/ast/binding_decoration_test.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/binding_decoration.h"
-
 #include "src/ast/constant_id_decoration.h"
 #include "src/ast/test_helper.h"
 
diff --git a/src/ast/bitcast_expression.cc b/src/ast/bitcast_expression.cc
index a134c21..2b985f7 100644
--- a/src/ast/bitcast_expression.cc
+++ b/src/ast/bitcast_expression.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/bitcast_expression.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::BitcastExpression);
diff --git a/src/ast/bitcast_expression.h b/src/ast/bitcast_expression.h
index 7f9b937..d56dec8 100644
--- a/src/ast/bitcast_expression.h
+++ b/src/ast/bitcast_expression.h
@@ -15,12 +15,7 @@
 #ifndef SRC_AST_BITCAST_EXPRESSION_H_
 #define SRC_AST_BITCAST_EXPRESSION_H_
 
-#include <memory>
-#include <utility>
-
 #include "src/ast/expression.h"
-#include "src/ast/literal.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 1380400..3f2cc7c 100644
--- a/src/ast/bitcast_expression_test.cc
+++ b/src/ast/bitcast_expression_test.cc
@@ -14,9 +14,7 @@
 
 #include "src/ast/bitcast_expression.h"
 
-#include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
-#include "src/type/f32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/block_statement.cc b/src/ast/block_statement.cc
index d5d18dc..5ed4d04 100644
--- a/src/ast/block_statement.cc
+++ b/src/ast/block_statement.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/block_statement.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::BlockStatement);
diff --git a/src/ast/block_statement.h b/src/ast/block_statement.h
index a2cb102..f5653f9 100644
--- a/src/ast/block_statement.h
+++ b/src/ast/block_statement.h
@@ -15,9 +15,7 @@
 #ifndef SRC_AST_BLOCK_STATEMENT_H_
 #define SRC_AST_BLOCK_STATEMENT_H_
 
-#include <memory>
 #include <utility>
-#include <vector>
 
 #include "src/ast/statement.h"
 
diff --git a/src/ast/block_statement_test.cc b/src/ast/block_statement_test.cc
index ddbbcad..c4a583c 100644
--- a/src/ast/block_statement_test.cc
+++ b/src/ast/block_statement_test.cc
@@ -12,11 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/block_statement.h"
-
-#include <memory>
-#include <sstream>
-
 #include "src/ast/discard_statement.h"
 #include "src/ast/if_statement.h"
 #include "src/ast/test_helper.h"
diff --git a/src/ast/bool_literal.cc b/src/ast/bool_literal.cc
index d689730..e6e2fb6 100644
--- a/src/ast/bool_literal.cc
+++ b/src/ast/bool_literal.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/bool_literal.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::BoolLiteral);
diff --git a/src/ast/bool_literal_test.cc b/src/ast/bool_literal_test.cc
index 59ee37a..398ff84 100644
--- a/src/ast/bool_literal_test.cc
+++ b/src/ast/bool_literal_test.cc
@@ -12,14 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/bool_literal.h"
-
-#include "src/ast/float_literal.h"
 #include "src/ast/null_literal.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/uint_literal.h"
-#include "src/type/bool_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/break_statement.cc b/src/ast/break_statement.cc
index 4346939..9ec4e34 100644
--- a/src/ast/break_statement.cc
+++ b/src/ast/break_statement.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/break_statement.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::BreakStatement);
diff --git a/src/ast/builtin_decoration.cc b/src/ast/builtin_decoration.cc
index 90b5e40..9ae92cc 100644
--- a/src/ast/builtin_decoration.cc
+++ b/src/ast/builtin_decoration.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/builtin_decoration.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::BuiltinDecoration);
diff --git a/src/ast/builtin_decoration_test.cc b/src/ast/builtin_decoration_test.cc
index a0fd15b..90f4670 100644
--- a/src/ast/builtin_decoration_test.cc
+++ b/src/ast/builtin_decoration_test.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/builtin_decoration.h"
-
 #include "src/ast/constant_id_decoration.h"
 #include "src/ast/test_helper.h"
 
diff --git a/src/ast/call_expression.cc b/src/ast/call_expression.cc
index 8a85eb2..628dae6 100644
--- a/src/ast/call_expression.cc
+++ b/src/ast/call_expression.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/call_expression.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::CallExpression);
diff --git a/src/ast/call_expression.h b/src/ast/call_expression.h
index 997d4c6..b503d03 100644
--- a/src/ast/call_expression.h
+++ b/src/ast/call_expression.h
@@ -15,11 +15,7 @@
 #ifndef SRC_AST_CALL_EXPRESSION_H_
 #define SRC_AST_CALL_EXPRESSION_H_
 
-#include <memory>
-#include <utility>
-
 #include "src/ast/expression.h"
-#include "src/ast/literal.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/call_expression_test.cc b/src/ast/call_expression_test.cc
index fd18009..e02d6bb 100644
--- a/src/ast/call_expression_test.cc
+++ b/src/ast/call_expression_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/call_expression.h"
-
-#include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
 
 namespace tint {
diff --git a/src/ast/call_statement.cc b/src/ast/call_statement.cc
index b5fedd3..16ecfb1 100644
--- a/src/ast/call_statement.cc
+++ b/src/ast/call_statement.cc
@@ -14,8 +14,6 @@
 
 #include "src/ast/call_statement.h"
 
-#include "src/ast/call_expression.h"
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::CallStatement);
diff --git a/src/ast/call_statement.h b/src/ast/call_statement.h
index 01698fb..dd2c837 100644
--- a/src/ast/call_statement.h
+++ b/src/ast/call_statement.h
@@ -15,9 +15,6 @@
 #ifndef SRC_AST_CALL_STATEMENT_H_
 #define SRC_AST_CALL_STATEMENT_H_
 
-#include <memory>
-#include <utility>
-
 #include "src/ast/call_expression.h"
 #include "src/ast/statement.h"
 
diff --git a/src/ast/call_statement_test.cc b/src/ast/call_statement_test.cc
index 57b72e9..2736463 100644
--- a/src/ast/call_statement_test.cc
+++ b/src/ast/call_statement_test.cc
@@ -14,8 +14,6 @@
 
 #include "src/ast/call_statement.h"
 
-#include "src/ast/call_expression.h"
-#include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
 
 namespace tint {
diff --git a/src/ast/case_statement.cc b/src/ast/case_statement.cc
index dd60126..5f4dc37 100644
--- a/src/ast/case_statement.cc
+++ b/src/ast/case_statement.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/case_statement.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::CaseStatement);
diff --git a/src/ast/case_statement.h b/src/ast/case_statement.h
index e62a47a..ef9c1ff 100644
--- a/src/ast/case_statement.h
+++ b/src/ast/case_statement.h
@@ -15,14 +15,10 @@
 #ifndef SRC_AST_CASE_STATEMENT_H_
 #define SRC_AST_CASE_STATEMENT_H_
 
-#include <memory>
-#include <utility>
 #include <vector>
 
 #include "src/ast/block_statement.h"
-#include "src/ast/expression.h"
 #include "src/ast/int_literal.h"
-#include "src/ast/statement.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/case_statement_test.cc b/src/ast/case_statement_test.cc
index 301036c..2f9c74c 100644
--- a/src/ast/case_statement_test.cc
+++ b/src/ast/case_statement_test.cc
@@ -16,11 +16,7 @@
 
 #include "src/ast/discard_statement.h"
 #include "src/ast/if_statement.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.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/constant_id_decoration.cc b/src/ast/constant_id_decoration.cc
index f816703..d80a3aa 100644
--- a/src/ast/constant_id_decoration.cc
+++ b/src/ast/constant_id_decoration.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/constant_id_decoration.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::ConstantIdDecoration);
diff --git a/src/ast/constant_id_decoration.h b/src/ast/constant_id_decoration.h
index faba01b..bc9c7c3 100644
--- a/src/ast/constant_id_decoration.h
+++ b/src/ast/constant_id_decoration.h
@@ -15,7 +15,6 @@
 #ifndef SRC_AST_CONSTANT_ID_DECORATION_H_
 #define SRC_AST_CONSTANT_ID_DECORATION_H_
 
-#include "src/ast/builtin.h"
 #include "src/ast/variable_decoration.h"
 
 namespace tint {
diff --git a/src/ast/constructor_expression.cc b/src/ast/constructor_expression.cc
index 7074cf9..9df22c6 100644
--- a/src/ast/constructor_expression.cc
+++ b/src/ast/constructor_expression.cc
@@ -14,8 +14,6 @@
 
 #include "src/ast/constructor_expression.h"
 
-#include <assert.h>
-
 TINT_INSTANTIATE_TYPEINFO(tint::ast::ConstructorExpression);
 
 namespace tint {
diff --git a/src/ast/continue_statement.cc b/src/ast/continue_statement.cc
index a82cd34..f5d5201 100644
--- a/src/ast/continue_statement.cc
+++ b/src/ast/continue_statement.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/continue_statement.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::ContinueStatement);
diff --git a/src/ast/continue_statement.h b/src/ast/continue_statement.h
index df8a3a5..512741f 100644
--- a/src/ast/continue_statement.h
+++ b/src/ast/continue_statement.h
@@ -15,9 +15,6 @@
 #ifndef SRC_AST_CONTINUE_STATEMENT_H_
 #define SRC_AST_CONTINUE_STATEMENT_H_
 
-#include <memory>
-#include <utility>
-
 #include "src/ast/statement.h"
 
 namespace tint {
diff --git a/src/ast/decoration.h b/src/ast/decoration.h
index 7a92d4a..378ad7e 100644
--- a/src/ast/decoration.h
+++ b/src/ast/decoration.h
@@ -15,12 +15,9 @@
 #ifndef SRC_AST_DECORATION_H_
 #define SRC_AST_DECORATION_H_
 
-#include <memory>
-#include <ostream>
 #include <vector>
 
 #include "src/ast/node.h"
-#include "src/source.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/decoration_test.cc b/src/ast/decoration_test.cc
index ea8ac2a..1bab2c0 100644
--- a/src/ast/decoration_test.cc
+++ b/src/ast/decoration_test.cc
@@ -12,28 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/decoration.h"
-
-#include <sstream>
-#include <unordered_map>
-#include <unordered_set>
-#include <utility>
-
 #include "src/ast/access_decoration.h"
-#include "src/ast/array_decoration.h"
-#include "src/ast/binding_decoration.h"
-#include "src/ast/builtin_decoration.h"
 #include "src/ast/constant_id_decoration.h"
-#include "src/ast/function_decoration.h"
-#include "src/ast/location_decoration.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/stride_decoration.h"
-#include "src/ast/struct_decoration.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_decoration.h"
-#include "src/ast/variable_decoration.h"
 #include "src/ast/workgroup_decoration.h"
 
 namespace tint {
diff --git a/src/ast/discard_statement.cc b/src/ast/discard_statement.cc
index e4a2c85..a33373f 100644
--- a/src/ast/discard_statement.cc
+++ b/src/ast/discard_statement.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/discard_statement.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::DiscardStatement);
diff --git a/src/ast/discard_statement_test.cc b/src/ast/discard_statement_test.cc
index 6f6b3c3..8033abe 100644
--- a/src/ast/discard_statement_test.cc
+++ b/src/ast/discard_statement_test.cc
@@ -14,8 +14,6 @@
 
 #include "src/ast/discard_statement.h"
 
-#include <sstream>
-
 #include "src/ast/test_helper.h"
 
 namespace tint {
diff --git a/src/ast/else_statement.cc b/src/ast/else_statement.cc
index 7643946..aa359e5 100644
--- a/src/ast/else_statement.cc
+++ b/src/ast/else_statement.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/else_statement.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::ElseStatement);
diff --git a/src/ast/else_statement.h b/src/ast/else_statement.h
index 95977dd..9e34019 100644
--- a/src/ast/else_statement.h
+++ b/src/ast/else_statement.h
@@ -15,13 +15,10 @@
 #ifndef SRC_AST_ELSE_STATEMENT_H_
 #define SRC_AST_ELSE_STATEMENT_H_
 
-#include <memory>
-#include <utility>
 #include <vector>
 
 #include "src/ast/block_statement.h"
 #include "src/ast/expression.h"
-#include "src/ast/statement.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/else_statement_test.cc b/src/ast/else_statement_test.cc
index 95f3f0d..e17e599 100644
--- a/src/ast/else_statement_test.cc
+++ b/src/ast/else_statement_test.cc
@@ -12,14 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/else_statement.h"
-
-#include "src/ast/bool_literal.h"
 #include "src/ast/discard_statement.h"
 #include "src/ast/if_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/test_helper.h"
-#include "src/type/bool_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/expression.h b/src/ast/expression.h
index 62a9a72..fbf1fe5 100644
--- a/src/ast/expression.h
+++ b/src/ast/expression.h
@@ -15,7 +15,6 @@
 #ifndef SRC_AST_EXPRESSION_H_
 #define SRC_AST_EXPRESSION_H_
 
-#include <memory>
 #include <string>
 #include <vector>
 
diff --git a/src/ast/fallthrough_statement.cc b/src/ast/fallthrough_statement.cc
index 5110928..1dcf72d 100644
--- a/src/ast/fallthrough_statement.cc
+++ b/src/ast/fallthrough_statement.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/fallthrough_statement.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::FallthroughStatement);
diff --git a/src/ast/float_literal.cc b/src/ast/float_literal.cc
index 421880a..9454162 100644
--- a/src/ast/float_literal.cc
+++ b/src/ast/float_literal.cc
@@ -15,9 +15,7 @@
 #include "src/ast/float_literal.h"
 
 #include <limits>
-#include <sstream>
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::FloatLiteral);
diff --git a/src/ast/float_literal_test.cc b/src/ast/float_literal_test.cc
index 802b124..4f7572c 100644
--- a/src/ast/float_literal_test.cc
+++ b/src/ast/float_literal_test.cc
@@ -12,14 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/float_literal.h"
-
-#include "src/ast/bool_literal.h"
 #include "src/ast/null_literal.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.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 8110248..5858867 100644
--- a/src/ast/function.cc
+++ b/src/ast/function.cc
@@ -14,16 +14,9 @@
 
 #include "src/ast/function.h"
 
-#include <sstream>
-
 #include "src/ast/stage_decoration.h"
-#include "src/ast/variable.h"
 #include "src/ast/workgroup_decoration.h"
-#include "src/clone_context.h"
 #include "src/program_builder.h"
-#include "src/type/multisampled_texture_type.h"
-#include "src/type/sampled_texture_type.h"
-#include "src/type/texture_type.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::Function);
 
diff --git a/src/ast/function.h b/src/ast/function.h
index ca2f6f3..8ac517e 100644
--- a/src/ast/function.h
+++ b/src/ast/function.h
@@ -15,8 +15,6 @@
 #ifndef SRC_AST_FUNCTION_H_
 #define SRC_AST_FUNCTION_H_
 
-#include <memory>
-#include <ostream>
 #include <string>
 #include <tuple>
 #include <utility>
@@ -25,17 +23,11 @@
 #include "src/ast/binding_decoration.h"
 #include "src/ast/block_statement.h"
 #include "src/ast/builtin_decoration.h"
-#include "src/ast/expression.h"
 #include "src/ast/function_decoration.h"
 #include "src/ast/group_decoration.h"
 #include "src/ast/location_decoration.h"
-#include "src/ast/node.h"
 #include "src/ast/pipeline_stage.h"
-#include "src/ast/statement.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/function_decoration.h b/src/ast/function_decoration.h
index 556a0d9..5a75e0e 100644
--- a/src/ast/function_decoration.h
+++ b/src/ast/function_decoration.h
@@ -15,8 +15,6 @@
 #ifndef SRC_AST_FUNCTION_DECORATION_H_
 #define SRC_AST_FUNCTION_DECORATION_H_
 
-#include <memory>
-#include <ostream>
 #include <vector>
 
 #include "src/ast/decoration.h"
diff --git a/src/ast/function_test.cc b/src/ast/function_test.cc
index 2d65a45..db7aee9 100644
--- a/src/ast/function_test.cc
+++ b/src/ast/function_test.cc
@@ -12,15 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/function.h"
-
-#include "src/ast/builtin_decoration.h"
 #include "src/ast/discard_statement.h"
-#include "src/ast/location_decoration.h"
-#include "src/ast/pipeline_stage.h"
 #include "src/ast/stage_decoration.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/variable.h"
 #include "src/ast/workgroup_decoration.h"
 
 namespace tint {
diff --git a/src/ast/group_decoration.cc b/src/ast/group_decoration.cc
index c64d395..d531859 100644
--- a/src/ast/group_decoration.cc
+++ b/src/ast/group_decoration.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/group_decoration.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::GroupDecoration);
diff --git a/src/ast/group_decoration.h b/src/ast/group_decoration.h
index aa219e3..431ef86 100644
--- a/src/ast/group_decoration.h
+++ b/src/ast/group_decoration.h
@@ -15,8 +15,6 @@
 #ifndef SRC_AST_GROUP_DECORATION_H_
 #define SRC_AST_GROUP_DECORATION_H_
 
-#include <stddef.h>
-
 #include "src/ast/variable_decoration.h"
 
 namespace tint {
diff --git a/src/ast/group_decoration_test.cc b/src/ast/group_decoration_test.cc
index f600467..9dfbdd4 100644
--- a/src/ast/group_decoration_test.cc
+++ b/src/ast/group_decoration_test.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/group_decoration.h"
-
 #include "src/ast/constant_id_decoration.h"
 #include "src/ast/test_helper.h"
 
diff --git a/src/ast/identifier_expression.cc b/src/ast/identifier_expression.cc
index cd5c346..1f8c671 100644
--- a/src/ast/identifier_expression.cc
+++ b/src/ast/identifier_expression.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/identifier_expression.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::IdentifierExpression);
diff --git a/src/ast/identifier_expression.h b/src/ast/identifier_expression.h
index 7b4da0e..2794599 100644
--- a/src/ast/identifier_expression.h
+++ b/src/ast/identifier_expression.h
@@ -15,12 +15,8 @@
 #ifndef SRC_AST_IDENTIFIER_EXPRESSION_H_
 #define SRC_AST_IDENTIFIER_EXPRESSION_H_
 
-#include <memory>
-#include <utility>
-
 #include "src/ast/expression.h"
 #include "src/semantic/intrinsic.h"
-#include "src/symbol.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/identifier_expression_test.cc b/src/ast/identifier_expression_test.cc
index ba9f5ef..3d22e1d 100644
--- a/src/ast/identifier_expression_test.cc
+++ b/src/ast/identifier_expression_test.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/identifier_expression.h"
-
 #include "src/ast/test_helper.h"
 
 namespace tint {
diff --git a/src/ast/if_statement.cc b/src/ast/if_statement.cc
index 94fc2df..eee9e09 100644
--- a/src/ast/if_statement.cc
+++ b/src/ast/if_statement.cc
@@ -14,8 +14,6 @@
 
 #include "src/ast/if_statement.h"
 
-#include "src/ast/else_statement.h"
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::IfStatement);
diff --git a/src/ast/if_statement.h b/src/ast/if_statement.h
index 3397368..4c578aa 100644
--- a/src/ast/if_statement.h
+++ b/src/ast/if_statement.h
@@ -15,13 +15,9 @@
 #ifndef SRC_AST_IF_STATEMENT_H_
 #define SRC_AST_IF_STATEMENT_H_
 
-#include <memory>
 #include <utility>
 
-#include "src/ast/block_statement.h"
 #include "src/ast/else_statement.h"
-#include "src/ast/expression.h"
-#include "src/ast/statement.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/if_statement_test.cc b/src/ast/if_statement_test.cc
index 03cfda5..a222886 100644
--- a/src/ast/if_statement_test.cc
+++ b/src/ast/if_statement_test.cc
@@ -15,7 +15,6 @@
 #include "src/ast/if_statement.h"
 
 #include "src/ast/discard_statement.h"
-#include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
 
 namespace tint {
diff --git a/src/ast/int_literal_test.cc b/src/ast/int_literal_test.cc
index 58abbfb..01ce5d2 100644
--- a/src/ast/int_literal_test.cc
+++ b/src/ast/int_literal_test.cc
@@ -12,16 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/int_literal.h"
-
-#include "src/ast/bool_literal.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/null_literal.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.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 7341228..4a8748c 100644
--- a/src/ast/intrinsic_texture_helper_test.cc
+++ b/src/ast/intrinsic_texture_helper_test.cc
@@ -14,14 +14,10 @@
 
 #include "src/ast/intrinsic_texture_helper_test.h"
 
-#include "src/ast/type_constructor_expression.h"
-#include "src/debug.h"
-#include "src/program_builder.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 {
diff --git a/src/ast/intrinsic_texture_helper_test.h b/src/ast/intrinsic_texture_helper_test.h
index 91425af..521d2c9 100644
--- a/src/ast/intrinsic_texture_helper_test.h
+++ b/src/ast/intrinsic_texture_helper_test.h
@@ -15,14 +15,11 @@
 #ifndef SRC_AST_INTRINSIC_TEXTURE_HELPER_TEST_H_
 #define SRC_AST_INTRINSIC_TEXTURE_HELPER_TEST_H_
 
-#include <functional>
 #include <vector>
 
 #include "src/ast/access_control.h"
 #include "src/program_builder.h"
-#include "src/type/sampler_type.h"
 #include "src/type/storage_texture_type.h"
-#include "src/type/texture_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/literal.h b/src/ast/literal.h
index 96779d7..826c0bc 100644
--- a/src/ast/literal.h
+++ b/src/ast/literal.h
@@ -18,7 +18,6 @@
 #include <string>
 
 #include "src/ast/node.h"
-#include "src/type/type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/location_decoration.cc b/src/ast/location_decoration.cc
index 0337f29..d6e7f2f 100644
--- a/src/ast/location_decoration.cc
+++ b/src/ast/location_decoration.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/location_decoration.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::LocationDecoration);
diff --git a/src/ast/location_decoration.h b/src/ast/location_decoration.h
index 44e2c08..c4715e5 100644
--- a/src/ast/location_decoration.h
+++ b/src/ast/location_decoration.h
@@ -15,8 +15,6 @@
 #ifndef SRC_AST_LOCATION_DECORATION_H_
 #define SRC_AST_LOCATION_DECORATION_H_
 
-#include <stddef.h>
-
 #include "src/ast/variable_decoration.h"
 
 namespace tint {
diff --git a/src/ast/location_decoration_test.cc b/src/ast/location_decoration_test.cc
index fe3bab4..fae40f9 100644
--- a/src/ast/location_decoration_test.cc
+++ b/src/ast/location_decoration_test.cc
@@ -12,10 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/location_decoration.h"
-
-#include <sstream>
-
 #include "src/ast/constant_id_decoration.h"
 #include "src/ast/test_helper.h"
 
diff --git a/src/ast/loop_statement.cc b/src/ast/loop_statement.cc
index 98c99e4..66774a8 100644
--- a/src/ast/loop_statement.cc
+++ b/src/ast/loop_statement.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/loop_statement.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::LoopStatement);
diff --git a/src/ast/loop_statement.h b/src/ast/loop_statement.h
index ede2fc0..c0bc2dc 100644
--- a/src/ast/loop_statement.h
+++ b/src/ast/loop_statement.h
@@ -15,11 +15,7 @@
 #ifndef SRC_AST_LOOP_STATEMENT_H_
 #define SRC_AST_LOOP_STATEMENT_H_
 
-#include <memory>
-#include <utility>
-
 #include "src/ast/block_statement.h"
-#include "src/ast/statement.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/loop_statement_test.cc b/src/ast/loop_statement_test.cc
index c971a76..7577773 100644
--- a/src/ast/loop_statement_test.cc
+++ b/src/ast/loop_statement_test.cc
@@ -14,9 +14,6 @@
 
 #include "src/ast/loop_statement.h"
 
-#include <memory>
-#include <sstream>
-
 #include "src/ast/discard_statement.h"
 #include "src/ast/if_statement.h"
 #include "src/ast/test_helper.h"
diff --git a/src/ast/member_accessor_expression.cc b/src/ast/member_accessor_expression.cc
index b632a61..7ad6707 100644
--- a/src/ast/member_accessor_expression.cc
+++ b/src/ast/member_accessor_expression.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/member_accessor_expression.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::MemberAccessorExpression);
diff --git a/src/ast/member_accessor_expression.h b/src/ast/member_accessor_expression.h
index 45b4d68..b3a87ab 100644
--- a/src/ast/member_accessor_expression.h
+++ b/src/ast/member_accessor_expression.h
@@ -15,12 +15,7 @@
 #ifndef SRC_AST_MEMBER_ACCESSOR_EXPRESSION_H_
 #define SRC_AST_MEMBER_ACCESSOR_EXPRESSION_H_
 
-#include <memory>
-#include <utility>
-
-#include "src/ast/expression.h"
 #include "src/ast/identifier_expression.h"
-#include "src/ast/literal.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/member_accessor_expression_test.cc b/src/ast/member_accessor_expression_test.cc
index a4cfc80..06f004f 100644
--- a/src/ast/member_accessor_expression_test.cc
+++ b/src/ast/member_accessor_expression_test.cc
@@ -12,11 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/member_accessor_expression.h"
-
-#include <sstream>
-
-#include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
 
 namespace tint {
diff --git a/src/ast/module.cc b/src/ast/module.cc
index 3791a18..ed23908 100644
--- a/src/ast/module.cc
+++ b/src/ast/module.cc
@@ -14,14 +14,9 @@
 
 #include "src/ast/module.h"
 
-#include <sstream>
-#include <string>
 #include <utility>
 
-#include "src/debug.h"
 #include "src/program_builder.h"
-#include "src/type/alias_type.h"
-#include "src/type/struct_type.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::Module);
 
diff --git a/src/ast/module.h b/src/ast/module.h
index cd506a2..91a4f87 100644
--- a/src/ast/module.h
+++ b/src/ast/module.h
@@ -19,9 +19,6 @@
 #include <vector>
 
 #include "src/ast/function.h"
-#include "src/ast/node.h"
-#include "src/ast/variable.h"
-#include "src/type/type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/module_clone_test.cc b/src/ast/module_clone_test.cc
index 22ffbb9..39095fd 100644
--- a/src/ast/module_clone_test.cc
+++ b/src/ast/module_clone_test.cc
@@ -15,10 +15,6 @@
 #include <unordered_set>
 
 #include "gtest/gtest.h"
-#include "src/ast/case_statement.h"
-#include "src/ast/module.h"
-#include "src/program.h"
-#include "src/program_builder.h"
 #include "src/reader/wgsl/parser.h"
 #include "src/writer/wgsl/generator.h"
 
diff --git a/src/ast/module_test.cc b/src/ast/module_test.cc
index 7d629a9..b77435f 100644
--- a/src/ast/module_test.cc
+++ b/src/ast/module_test.cc
@@ -12,18 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/module.h"
-
-#include <sstream>
-#include <utility>
-
-#include "gmock/gmock.h"
-#include "src/ast/function.h"
 #include "src/ast/test_helper.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.cc b/src/ast/node.cc
index 4be1bec..a29fabc 100644
--- a/src/ast/node.cc
+++ b/src/ast/node.cc
@@ -14,8 +14,6 @@
 
 #include "src/ast/node.h"
 
-#include <sstream>
-
 TINT_INSTANTIATE_TYPEINFO(tint::ast::Node);
 
 namespace tint {
diff --git a/src/ast/node.h b/src/ast/node.h
index c29c5e5..fad460f 100644
--- a/src/ast/node.h
+++ b/src/ast/node.h
@@ -15,12 +15,9 @@
 #ifndef SRC_AST_NODE_H_
 #define SRC_AST_NODE_H_
 
-#include <ostream>
 #include <string>
-#include <vector>
 
 #include "src/clone_context.h"
-#include "src/source.h"
 
 namespace tint {
 
diff --git a/src/ast/null_literal.cc b/src/ast/null_literal.cc
index ccbc75c..1594789 100644
--- a/src/ast/null_literal.cc
+++ b/src/ast/null_literal.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/null_literal.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::NullLiteral);
diff --git a/src/ast/null_literal_test.cc b/src/ast/null_literal_test.cc
index bd99d71..ae90f3d 100644
--- a/src/ast/null_literal_test.cc
+++ b/src/ast/null_literal_test.cc
@@ -14,12 +14,7 @@
 
 #include "src/ast/null_literal.h"
 
-#include "src/ast/bool_literal.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
-#include "src/ast/uint_literal.h"
-#include "src/type/i32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/return_statement.cc b/src/ast/return_statement.cc
index 81ec4f3..38df855 100644
--- a/src/ast/return_statement.cc
+++ b/src/ast/return_statement.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/return_statement.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::ReturnStatement);
diff --git a/src/ast/return_statement.h b/src/ast/return_statement.h
index 9de729e..0079248 100644
--- a/src/ast/return_statement.h
+++ b/src/ast/return_statement.h
@@ -15,9 +15,6 @@
 #ifndef SRC_AST_RETURN_STATEMENT_H_
 #define SRC_AST_RETURN_STATEMENT_H_
 
-#include <memory>
-#include <utility>
-
 #include "src/ast/expression.h"
 #include "src/ast/statement.h"
 
diff --git a/src/ast/return_statement_test.cc b/src/ast/return_statement_test.cc
index fec6da6..81fd712 100644
--- a/src/ast/return_statement_test.cc
+++ b/src/ast/return_statement_test.cc
@@ -14,9 +14,6 @@
 
 #include "src/ast/return_statement.h"
 
-#include <sstream>
-
-#include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
 
 namespace tint {
diff --git a/src/ast/scalar_constructor_expression.cc b/src/ast/scalar_constructor_expression.cc
index bd7a034..e82c17c 100644
--- a/src/ast/scalar_constructor_expression.cc
+++ b/src/ast/scalar_constructor_expression.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/scalar_constructor_expression.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::ScalarConstructorExpression);
diff --git a/src/ast/scalar_constructor_expression.h b/src/ast/scalar_constructor_expression.h
index ee43780..fe6c6d9 100644
--- a/src/ast/scalar_constructor_expression.h
+++ b/src/ast/scalar_constructor_expression.h
@@ -15,9 +15,6 @@
 #ifndef SRC_AST_SCALAR_CONSTRUCTOR_EXPRESSION_H_
 #define SRC_AST_SCALAR_CONSTRUCTOR_EXPRESSION_H_
 
-#include <memory>
-#include <utility>
-
 #include "src/ast/constructor_expression.h"
 #include "src/ast/literal.h"
 
diff --git a/src/ast/scalar_constructor_expression_test.cc b/src/ast/scalar_constructor_expression_test.cc
index 1418b0a..aadc5be 100644
--- a/src/ast/scalar_constructor_expression_test.cc
+++ b/src/ast/scalar_constructor_expression_test.cc
@@ -12,11 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/scalar_constructor_expression.h"
-
-#include "src/ast/bool_literal.h"
 #include "src/ast/test_helper.h"
-#include "src/type/bool_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/sint_literal.cc b/src/ast/sint_literal.cc
index 784e204..69fee9e 100644
--- a/src/ast/sint_literal.cc
+++ b/src/ast/sint_literal.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/sint_literal.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::SintLiteral);
diff --git a/src/ast/sint_literal_test.cc b/src/ast/sint_literal_test.cc
index 3f9516d..9ca7b9a 100644
--- a/src/ast/sint_literal_test.cc
+++ b/src/ast/sint_literal_test.cc
@@ -12,15 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/sint_literal.h"
-
-#include "src/ast/bool_literal.h"
-#include "src/ast/float_literal.h"
 #include "src/ast/null_literal.h"
 #include "src/ast/test_helper.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/stage_decoration.cc b/src/ast/stage_decoration.cc
index d5bf1ad..77720c5 100644
--- a/src/ast/stage_decoration.cc
+++ b/src/ast/stage_decoration.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/stage_decoration.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::StageDecoration);
diff --git a/src/ast/stage_decoration_test.cc b/src/ast/stage_decoration_test.cc
index 5b0306a..ba1efa3 100644
--- a/src/ast/stage_decoration_test.cc
+++ b/src/ast/stage_decoration_test.cc
@@ -14,8 +14,6 @@
 
 #include "src/ast/stage_decoration.h"
 
-#include <sstream>
-
 #include "src/ast/test_helper.h"
 #include "src/ast/workgroup_decoration.h"
 
diff --git a/src/ast/statement.cc b/src/ast/statement.cc
index 8ecb2b0..0283abe 100644
--- a/src/ast/statement.cc
+++ b/src/ast/statement.cc
@@ -14,16 +14,11 @@
 
 #include "src/ast/statement.h"
 
-#include <assert.h>
-
 #include "src/ast/assignment_statement.h"
-#include "src/ast/block_statement.h"
 #include "src/ast/break_statement.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/continue_statement.h"
 #include "src/ast/discard_statement.h"
-#include "src/ast/else_statement.h"
 #include "src/ast/fallthrough_statement.h"
 #include "src/ast/if_statement.h"
 #include "src/ast/loop_statement.h"
diff --git a/src/ast/statement.h b/src/ast/statement.h
index 14808d5..53a6fd0 100644
--- a/src/ast/statement.h
+++ b/src/ast/statement.h
@@ -15,7 +15,6 @@
 #ifndef SRC_AST_STATEMENT_H_
 #define SRC_AST_STATEMENT_H_
 
-#include <memory>
 #include <vector>
 
 #include "src/ast/node.h"
diff --git a/src/ast/stride_decoration.cc b/src/ast/stride_decoration.cc
index 8eb33e3..6cf0c8f 100644
--- a/src/ast/stride_decoration.cc
+++ b/src/ast/stride_decoration.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/stride_decoration.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::StrideDecoration);
diff --git a/src/ast/stride_decoration.h b/src/ast/stride_decoration.h
index d8ae8bb..9b350df 100644
--- a/src/ast/stride_decoration.h
+++ b/src/ast/stride_decoration.h
@@ -15,8 +15,6 @@
 #ifndef SRC_AST_STRIDE_DECORATION_H_
 #define SRC_AST_STRIDE_DECORATION_H_
 
-#include <stddef.h>
-
 #include "src/ast/array_decoration.h"
 
 namespace tint {
diff --git a/src/ast/stride_decoration_test.cc b/src/ast/stride_decoration_test.cc
index 7046767..ae81a29 100644
--- a/src/ast/stride_decoration_test.cc
+++ b/src/ast/stride_decoration_test.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/stride_decoration.h"
-
 #include "src/ast/test_helper.h"
 
 namespace tint {
diff --git a/src/ast/struct.cc b/src/ast/struct.cc
index f144568..c21c17e 100644
--- a/src/ast/struct.cc
+++ b/src/ast/struct.cc
@@ -15,7 +15,6 @@
 #include "src/ast/struct.h"
 
 #include "src/ast/struct_block_decoration.h"
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::Struct);
diff --git a/src/ast/struct.h b/src/ast/struct.h
index cff8c6e..752ea05 100644
--- a/src/ast/struct.h
+++ b/src/ast/struct.h
@@ -15,11 +15,8 @@
 #ifndef SRC_AST_STRUCT_H_
 #define SRC_AST_STRUCT_H_
 
-#include <ostream>
-#include <string>
 #include <utility>
 
-#include "src/ast/node.h"
 #include "src/ast/struct_decoration.h"
 #include "src/ast/struct_member.h"
 
diff --git a/src/ast/struct_block_decoration.cc b/src/ast/struct_block_decoration.cc
index 6c116af..dfc3b0b 100644
--- a/src/ast/struct_block_decoration.cc
+++ b/src/ast/struct_block_decoration.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/struct_block_decoration.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::StructBlockDecoration);
diff --git a/src/ast/struct_block_decoration.h b/src/ast/struct_block_decoration.h
index d18117a..cd4bd4f 100644
--- a/src/ast/struct_block_decoration.h
+++ b/src/ast/struct_block_decoration.h
@@ -15,8 +15,6 @@
 #ifndef SRC_AST_STRUCT_BLOCK_DECORATION_H_
 #define SRC_AST_STRUCT_BLOCK_DECORATION_H_
 
-#include <memory>
-#include <ostream>
 #include <vector>
 
 #include "src/ast/struct_decoration.h"
diff --git a/src/ast/struct_decoration.h b/src/ast/struct_decoration.h
index c8af9e7..31c8e32 100644
--- a/src/ast/struct_decoration.h
+++ b/src/ast/struct_decoration.h
@@ -15,8 +15,6 @@
 #ifndef SRC_AST_STRUCT_DECORATION_H_
 #define SRC_AST_STRUCT_DECORATION_H_
 
-#include <memory>
-#include <ostream>
 #include <vector>
 
 #include "src/ast/decoration.h"
diff --git a/src/ast/struct_member.cc b/src/ast/struct_member.cc
index 88b300f..f6146c1 100644
--- a/src/ast/struct_member.cc
+++ b/src/ast/struct_member.cc
@@ -14,8 +14,6 @@
 
 #include "src/ast/struct_member.h"
 
-#include "src/ast/struct_member_offset_decoration.h"
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::StructMember);
diff --git a/src/ast/struct_member.h b/src/ast/struct_member.h
index 14411c7..92491e5 100644
--- a/src/ast/struct_member.h
+++ b/src/ast/struct_member.h
@@ -15,15 +15,10 @@
 #ifndef SRC_AST_STRUCT_MEMBER_H_
 #define SRC_AST_STRUCT_MEMBER_H_
 
-#include <memory>
-#include <ostream>
 #include <utility>
 #include <vector>
 
-#include "src/ast/node.h"
 #include "src/ast/struct_member_decoration.h"
-#include "src/symbol.h"
-#include "src/type/type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/struct_member_decoration.cc b/src/ast/struct_member_decoration.cc
index ff472c9..1e5b818 100644
--- a/src/ast/struct_member_decoration.cc
+++ b/src/ast/struct_member_decoration.cc
@@ -14,10 +14,6 @@
 
 #include "src/ast/struct_member_decoration.h"
 
-#include <assert.h>
-
-#include "src/ast/struct_member_offset_decoration.h"
-
 TINT_INSTANTIATE_TYPEINFO(tint::ast::StructMemberDecoration);
 
 namespace tint {
diff --git a/src/ast/struct_member_offset_decoration.cc b/src/ast/struct_member_offset_decoration.cc
index 68cd7b3..4f9f736 100644
--- a/src/ast/struct_member_offset_decoration.cc
+++ b/src/ast/struct_member_offset_decoration.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/struct_member_offset_decoration.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::StructMemberOffsetDecoration);
diff --git a/src/ast/struct_member_offset_decoration.h b/src/ast/struct_member_offset_decoration.h
index 96b207f..1052c69 100644
--- a/src/ast/struct_member_offset_decoration.h
+++ b/src/ast/struct_member_offset_decoration.h
@@ -15,8 +15,6 @@
 #ifndef SRC_AST_STRUCT_MEMBER_OFFSET_DECORATION_H_
 #define SRC_AST_STRUCT_MEMBER_OFFSET_DECORATION_H_
 
-#include <stddef.h>
-
 #include "src/ast/struct_member_decoration.h"
 
 namespace tint {
diff --git a/src/ast/struct_member_offset_decoration_test.cc b/src/ast/struct_member_offset_decoration_test.cc
index 196bebb..9ebd0a9 100644
--- a/src/ast/struct_member_offset_decoration_test.cc
+++ b/src/ast/struct_member_offset_decoration_test.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/struct_member_offset_decoration.h"
-
 #include "src/ast/test_helper.h"
 
 namespace tint {
diff --git a/src/ast/struct_member_test.cc b/src/ast/struct_member_test.cc
index 3c2851b..1b835de 100644
--- a/src/ast/struct_member_test.cc
+++ b/src/ast/struct_member_test.cc
@@ -12,14 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/struct_member.h"
-
-#include <sstream>
-#include <utility>
-
-#include "src/ast/struct_member_offset_decoration.h"
 #include "src/ast/test_helper.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 8d5cc9f..f2bd221 100644
--- a/src/ast/struct_test.cc
+++ b/src/ast/struct_test.cc
@@ -12,16 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/struct.h"
-
-#include <memory>
-#include <sstream>
-#include <utility>
-
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_member.h"
 #include "src/ast/test_helper.h"
-#include "src/type/i32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/switch_statement.cc b/src/ast/switch_statement.cc
index 3b2bf36..e196878 100644
--- a/src/ast/switch_statement.cc
+++ b/src/ast/switch_statement.cc
@@ -14,8 +14,6 @@
 
 #include "src/ast/switch_statement.h"
 
-#include "src/ast/case_statement.h"
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::SwitchStatement);
diff --git a/src/ast/switch_statement.h b/src/ast/switch_statement.h
index 5a11cbd..d3d061d 100644
--- a/src/ast/switch_statement.h
+++ b/src/ast/switch_statement.h
@@ -15,13 +15,8 @@
 #ifndef SRC_AST_SWITCH_STATEMENT_H_
 #define SRC_AST_SWITCH_STATEMENT_H_
 
-#include <memory>
-#include <utility>
-
 #include "src/ast/case_statement.h"
 #include "src/ast/expression.h"
-#include "src/ast/literal.h"
-#include "src/ast/statement.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/switch_statement_test.cc b/src/ast/switch_statement_test.cc
index cf455f0..036cb8c 100644
--- a/src/ast/switch_statement_test.cc
+++ b/src/ast/switch_statement_test.cc
@@ -14,13 +14,7 @@
 
 #include "src/ast/switch_statement.h"
 
-#include <sstream>
-
-#include "src/ast/case_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
-#include "src/type/i32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/test_helper.h b/src/ast/test_helper.h
index ba07295..d7a229e 100644
--- a/src/ast/test_helper.h
+++ b/src/ast/test_helper.h
@@ -15,10 +15,6 @@
 #ifndef SRC_AST_TEST_HELPER_H_
 #define SRC_AST_TEST_HELPER_H_
 
-#include <memory>
-#include <string>
-#include <utility>
-
 #include "gtest/gtest.h"
 #include "src/program_builder.h"
 
diff --git a/src/ast/type_constructor_expression.cc b/src/ast/type_constructor_expression.cc
index d81bb34..c4f42ae 100644
--- a/src/ast/type_constructor_expression.cc
+++ b/src/ast/type_constructor_expression.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/type_constructor_expression.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::TypeConstructorExpression);
diff --git a/src/ast/type_constructor_expression.h b/src/ast/type_constructor_expression.h
index da05b9a..30c5bbe 100644
--- a/src/ast/type_constructor_expression.h
+++ b/src/ast/type_constructor_expression.h
@@ -15,11 +15,9 @@
 #ifndef SRC_AST_TYPE_CONSTRUCTOR_EXPRESSION_H_
 #define SRC_AST_TYPE_CONSTRUCTOR_EXPRESSION_H_
 
-#include <memory>
 #include <utility>
 
 #include "src/ast/constructor_expression.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 c09ea2f..d392294 100644
--- a/src/ast/type_constructor_expression_test.cc
+++ b/src/ast/type_constructor_expression_test.cc
@@ -12,16 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/type_constructor_expression.h"
-
-#include <memory>
-#include <sstream>
-
-#include "src/ast/constructor_expression.h"
-#include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
-#include "src/type/f32_type.h"
-#include "src/type/vector_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/type_decoration.cc b/src/ast/type_decoration.cc
index 03e4584..8b7d457 100644
--- a/src/ast/type_decoration.cc
+++ b/src/ast/type_decoration.cc
@@ -14,10 +14,6 @@
 
 #include "src/ast/type_decoration.h"
 
-#include <assert.h>
-
-#include "src/ast/access_decoration.h"
-
 TINT_INSTANTIATE_TYPEINFO(tint::ast::TypeDecoration);
 
 namespace tint {
diff --git a/src/ast/uint_literal.cc b/src/ast/uint_literal.cc
index db03380..5d981cc 100644
--- a/src/ast/uint_literal.cc
+++ b/src/ast/uint_literal.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/uint_literal.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::UintLiteral);
diff --git a/src/ast/uint_literal_test.cc b/src/ast/uint_literal_test.cc
index 3da63b8..a1b09a4 100644
--- a/src/ast/uint_literal_test.cc
+++ b/src/ast/uint_literal_test.cc
@@ -12,14 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/uint_literal.h"
-
-#include "src/ast/bool_literal.h"
-#include "src/ast/float_literal.h"
 #include "src/ast/null_literal.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
-#include "src/type/u32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/unary_op_expression.cc b/src/ast/unary_op_expression.cc
index 10907c7..3e5305b 100644
--- a/src/ast/unary_op_expression.cc
+++ b/src/ast/unary_op_expression.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/unary_op_expression.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::UnaryOpExpression);
diff --git a/src/ast/unary_op_expression.h b/src/ast/unary_op_expression.h
index 7e8cc58..60c97f0 100644
--- a/src/ast/unary_op_expression.h
+++ b/src/ast/unary_op_expression.h
@@ -15,11 +15,7 @@
 #ifndef SRC_AST_UNARY_OP_EXPRESSION_H_
 #define SRC_AST_UNARY_OP_EXPRESSION_H_
 
-#include <memory>
-#include <utility>
-
 #include "src/ast/expression.h"
-#include "src/ast/literal.h"
 #include "src/ast/unary_op.h"
 
 namespace tint {
diff --git a/src/ast/unary_op_expression_test.cc b/src/ast/unary_op_expression_test.cc
index fbd24ad..8ac6082 100644
--- a/src/ast/unary_op_expression_test.cc
+++ b/src/ast/unary_op_expression_test.cc
@@ -14,9 +14,6 @@
 
 #include "src/ast/unary_op_expression.h"
 
-#include <sstream>
-
-#include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
 
 namespace tint {
diff --git a/src/ast/variable.cc b/src/ast/variable.cc
index 042d412..0af22c0 100644
--- a/src/ast/variable.cc
+++ b/src/ast/variable.cc
@@ -14,10 +14,7 @@
 
 #include "src/ast/variable.h"
 
-#include <assert.h>
-
 #include "src/ast/constant_id_decoration.h"
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 #include "src/semantic/variable.h"
 
diff --git a/src/ast/variable.h b/src/ast/variable.h
index fe88217..e5bcb0a 100644
--- a/src/ast/variable.h
+++ b/src/ast/variable.h
@@ -15,17 +15,12 @@
 #ifndef SRC_AST_VARIABLE_H_
 #define SRC_AST_VARIABLE_H_
 
-#include <memory>
-#include <ostream>
 #include <utility>
 #include <vector>
 
 #include "src/ast/expression.h"
-#include "src/ast/node.h"
 #include "src/ast/storage_class.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.cc b/src/ast/variable_decl_statement.cc
index c0780c5..61d6121 100644
--- a/src/ast/variable_decl_statement.cc
+++ b/src/ast/variable_decl_statement.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/variable_decl_statement.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::VariableDeclStatement);
diff --git a/src/ast/variable_decl_statement.h b/src/ast/variable_decl_statement.h
index edb52f6..10de4a9 100644
--- a/src/ast/variable_decl_statement.h
+++ b/src/ast/variable_decl_statement.h
@@ -15,10 +15,6 @@
 #ifndef SRC_AST_VARIABLE_DECL_STATEMENT_H_
 #define SRC_AST_VARIABLE_DECL_STATEMENT_H_
 
-#include <memory>
-#include <utility>
-
-#include "src/ast/expression.h"
 #include "src/ast/statement.h"
 #include "src/ast/variable.h"
 
diff --git a/src/ast/variable_decl_statement_test.cc b/src/ast/variable_decl_statement_test.cc
index 15e9eb5..d3ebbb6 100644
--- a/src/ast/variable_decl_statement_test.cc
+++ b/src/ast/variable_decl_statement_test.cc
@@ -15,8 +15,6 @@
 #include "src/ast/variable_decl_statement.h"
 
 #include "src/ast/test_helper.h"
-#include "src/ast/variable.h"
-#include "src/type/f32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/variable_decoration.cc b/src/ast/variable_decoration.cc
index 4500817..93e5794 100644
--- a/src/ast/variable_decoration.cc
+++ b/src/ast/variable_decoration.cc
@@ -14,8 +14,6 @@
 
 #include "src/ast/variable_decoration.h"
 
-#include <assert.h>
-
 TINT_INSTANTIATE_TYPEINFO(tint::ast::VariableDecoration);
 
 namespace tint {
diff --git a/src/ast/variable_test.cc b/src/ast/variable_test.cc
index 6f4369a..6176024 100644
--- a/src/ast/variable_test.cc
+++ b/src/ast/variable_test.cc
@@ -12,13 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/variable.h"
-
 #include "src/ast/constant_id_decoration.h"
-#include "src/ast/identifier_expression.h"
 #include "src/ast/test_helper.h"
-#include "src/type/f32_type.h"
-#include "src/type/i32_type.h"
 
 namespace tint {
 namespace ast {
diff --git a/src/ast/workgroup_decoration.cc b/src/ast/workgroup_decoration.cc
index 8d4362c..9e91575 100644
--- a/src/ast/workgroup_decoration.cc
+++ b/src/ast/workgroup_decoration.cc
@@ -14,7 +14,6 @@
 
 #include "src/ast/workgroup_decoration.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::ast::WorkgroupDecoration);
diff --git a/src/ast/workgroup_decoration.h b/src/ast/workgroup_decoration.h
index a4f9953..16fe42a 100644
--- a/src/ast/workgroup_decoration.h
+++ b/src/ast/workgroup_decoration.h
@@ -15,8 +15,6 @@
 #ifndef SRC_AST_WORKGROUP_DECORATION_H_
 #define SRC_AST_WORKGROUP_DECORATION_H_
 
-#include <stddef.h>
-
 #include <tuple>
 
 #include "src/ast/function_decoration.h"
diff --git a/src/ast/workgroup_decoration_test.cc b/src/ast/workgroup_decoration_test.cc
index f45a0ba..f4f0126 100644
--- a/src/ast/workgroup_decoration_test.cc
+++ b/src/ast/workgroup_decoration_test.cc
@@ -14,8 +14,6 @@
 
 #include "src/ast/workgroup_decoration.h"
 
-#include <sstream>
-
 #include "src/ast/stage_decoration.h"
 #include "src/ast/test_helper.h"
 
diff --git a/src/castable.h b/src/castable.h
index 23be942..c5d88c3 100644
--- a/src/castable.h
+++ b/src/castable.h
@@ -15,9 +15,6 @@
 #ifndef SRC_CASTABLE_H_
 #define SRC_CASTABLE_H_
 
-#include <cstdint>
-#include <functional>
-#include <type_traits>
 #include <utility>
 
 namespace tint {
diff --git a/src/clone_context.cc b/src/clone_context.cc
index edc6e8b..06a28e1 100644
--- a/src/clone_context.cc
+++ b/src/clone_context.cc
@@ -14,9 +14,6 @@
 
 #include "src/clone_context.h"
 
-#include "src/ast/function.h"
-#include "src/ast/module.h"
-#include "src/program.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::Cloneable);
diff --git a/src/clone_context.h b/src/clone_context.h
index 94851c7..beb7e15 100644
--- a/src/clone_context.h
+++ b/src/clone_context.h
@@ -15,7 +15,6 @@
 #ifndef SRC_CLONE_CONTEXT_H_
 #define SRC_CLONE_CONTEXT_H_
 
-#include <cassert>
 #include <functional>
 #include <unordered_map>
 #include <utility>
@@ -23,7 +22,6 @@
 
 #include "src/castable.h"
 #include "src/debug.h"
-#include "src/source.h"
 #include "src/symbol.h"
 #include "src/traits.h"
 
diff --git a/src/clone_context_test.cc b/src/clone_context_test.cc
index 99e1137..529a18b 100644
--- a/src/clone_context_test.cc
+++ b/src/clone_context_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/clone_context.h"
-
-#include <string>
-#include <utility>
-#include <vector>
-
 #include "gtest/gtest-spi.h"
 
 #include "src/program_builder.h"
diff --git a/src/debug.cc b/src/debug.cc
index 2ac9ce7..7f20d09 100644
--- a/src/debug.cc
+++ b/src/debug.cc
@@ -14,14 +14,6 @@
 
 #include "src/debug.h"
 
-#include <stdio.h>
-
-#include <sstream>
-#include <string>
-#include <vector>
-
-#include "src/diagnostic/diagnostic.h"
-
 namespace tint {
 namespace {
 
diff --git a/src/debug.h b/src/debug.h
index 80c597f..f057fc0 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -15,7 +15,6 @@
 #ifndef SRC_DEBUG_H_
 #define SRC_DEBUG_H_
 
-#include <sstream>
 #include <utility>
 
 #include "src/diagnostic/diagnostic.h"
diff --git a/src/demangler.cc b/src/demangler.cc
index a85f9bd..5e89029 100644
--- a/src/demangler.cc
+++ b/src/demangler.cc
@@ -14,9 +14,6 @@
 
 #include "src/demangler.h"
 
-#include <sstream>
-
-#include "src/ast/module.h"
 #include "src/program.h"
 
 namespace tint {
diff --git a/src/diagnostic/diagnostic.h b/src/diagnostic/diagnostic.h
index b3b53db..a067855 100644
--- a/src/diagnostic/diagnostic.h
+++ b/src/diagnostic/diagnostic.h
@@ -15,8 +15,6 @@
 #ifndef SRC_DIAGNOSTIC_DIAGNOSTIC_H_
 #define SRC_DIAGNOSTIC_DIAGNOSTIC_H_
 
-#include <cassert>
-#include <initializer_list>
 #include <string>
 #include <utility>
 #include <vector>
diff --git a/src/diagnostic/formatter.cc b/src/diagnostic/formatter.cc
index 4acecab..ccf85a9 100644
--- a/src/diagnostic/formatter.cc
+++ b/src/diagnostic/formatter.cc
@@ -15,7 +15,6 @@
 #include "src/diagnostic/formatter.h"
 
 #include <algorithm>
-#include <sstream>
 #include <vector>
 
 #include "src/diagnostic/diagnostic.h"
diff --git a/src/diagnostic/formatter.h b/src/diagnostic/formatter.h
index 8ed0639..7e037cb 100644
--- a/src/diagnostic/formatter.h
+++ b/src/diagnostic/formatter.h
@@ -15,7 +15,6 @@
 #ifndef SRC_DIAGNOSTIC_FORMATTER_H_
 #define SRC_DIAGNOSTIC_FORMATTER_H_
 
-#include <memory>
 #include <string>
 
 namespace tint {
diff --git a/src/diagnostic/printer.cc b/src/diagnostic/printer.cc
index 47faa58..adb4b1b 100644
--- a/src/diagnostic/printer.cc
+++ b/src/diagnostic/printer.cc
@@ -14,8 +14,6 @@
 
 #include "src/diagnostic/printer.h"
 
-#include <cstring>
-
 namespace tint {
 namespace diag {
 
diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc
index f0b302e..170e72c 100644
--- a/src/inspector/inspector.cc
+++ b/src/inspector/inspector.cc
@@ -14,26 +14,18 @@
 
 #include "src/inspector/inspector.h"
 
-#include <algorithm>
-#include <map>
 #include <utility>
 
 #include "src/ast/bool_literal.h"
-#include "src/ast/constructor_expression.h"
 #include "src/ast/float_literal.h"
-#include "src/ast/function.h"
 #include "src/ast/module.h"
-#include "src/ast/null_literal.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/uint_literal.h"
-#include "src/ast/variable.h"
-#include "src/program.h"
 #include "src/semantic/function.h"
 #include "src/semantic/variable.h"
 #include "src/type/access_control_type.h"
 #include "src/type/array_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"
@@ -41,8 +33,6 @@
 #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/type.h"
 #include "src/type/u32_type.h"
 #include "src/type/vector_type.h"
 
diff --git a/src/inspector/inspector.h b/src/inspector/inspector.h
index 96f85e7..d1c047a 100644
--- a/src/inspector/inspector.h
+++ b/src/inspector/inspector.h
@@ -21,7 +21,6 @@
 #include <tuple>
 #include <vector>
 
-#include "src/ast/pipeline_stage.h"
 #include "src/inspector/entry_point.h"
 #include "src/inspector/scalar.h"
 #include "src/program.h"
diff --git a/src/inspector/inspector_test.cc b/src/inspector/inspector_test.cc
index 1b8613b..8622c8f 100644
--- a/src/inspector/inspector_test.cc
+++ b/src/inspector/inspector_test.cc
@@ -12,54 +12,15 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/inspector/inspector.h"
-
-#include <utility>
-
 #include "gtest/gtest.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
 #include "src/ast/constant_id_decoration.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/function.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/null_literal.h"
-#include "src/ast/pipeline_stage.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/stride_decoration.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_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/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/program_builder.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 "tint/tint.h"
 
 namespace tint {
diff --git a/src/intrinsic_table.cc b/src/intrinsic_table.cc
index c9dc2bf..87adf7e 100644
--- a/src/intrinsic_table.cc
+++ b/src/intrinsic_table.cc
@@ -16,17 +16,12 @@
 
 #include <algorithm>
 #include <limits>
-#include <string>
 #include <unordered_map>
 #include <utility>
 
-#include "src/block_allocator.h"
-#include "src/debug.h"
 #include "src/program_builder.h"
-#include "src/semantic/intrinsic.h"
 #include "src/type/access_control_type.h"
 #include "src/type/depth_texture_type.h"
-#include "src/type/f32_type.h"
 #include "src/type/multisampled_texture_type.h"
 #include "src/type/sampled_texture_type.h"
 #include "src/type/storage_texture_type.h"
diff --git a/src/intrinsic_table.h b/src/intrinsic_table.h
index e0771ef..167dcc4 100644
--- a/src/intrinsic_table.h
+++ b/src/intrinsic_table.h
@@ -19,7 +19,6 @@
 #include <string>
 #include <vector>
 
-#include "src/diagnostic/diagnostic.h"
 #include "src/semantic/intrinsic.h"
 
 namespace tint {
diff --git a/src/intrinsic_table_test.cc b/src/intrinsic_table_test.cc
index 7f377b4..1cf1868 100644
--- a/src/intrinsic_table_test.cc
+++ b/src/intrinsic_table_test.cc
@@ -15,7 +15,6 @@
 #include "src/intrinsic_table.h"
 
 #include "gmock/gmock.h"
-#include "gtest/gtest.h"
 #include "src/program_builder.h"
 #include "src/type/access_control_type.h"
 #include "src/type/depth_texture_type.h"
diff --git a/src/program.cc b/src/program.cc
index 71fc7fe..f341e8a 100644
--- a/src/program.cc
+++ b/src/program.cc
@@ -14,13 +14,9 @@
 
 #include "src/program.h"
 
-#include <sstream>
 #include <utility>
 
-#include "src/ast/module.h"
-#include "src/clone_context.h"
 #include "src/demangler.h"
-#include "src/program_builder.h"
 #include "src/resolver/resolver.h"
 #include "src/semantic/expression.h"
 
diff --git a/src/program.h b/src/program.h
index b4b4b83..efb0d35 100644
--- a/src/program.h
+++ b/src/program.h
@@ -18,9 +18,7 @@
 #include <string>
 
 #include "src/ast/function.h"
-#include "src/diagnostic/diagnostic.h"
 #include "src/semantic/info.h"
-#include "src/semantic/node.h"
 #include "src/symbol_table.h"
 #include "src/type/type_manager.h"
 
diff --git a/src/program_builder.cc b/src/program_builder.cc
index 57e8464..37e78bf 100644
--- a/src/program_builder.cc
+++ b/src/program_builder.cc
@@ -14,16 +14,10 @@
 
 #include "src/program_builder.h"
 
-#include <assert.h>
-
-#include <sstream>
-
 #include "src/ast/assignment_statement.h"
 #include "src/ast/variable_decl_statement.h"
-#include "src/clone_context.h"
 #include "src/demangler.h"
 #include "src/semantic/expression.h"
-#include "src/type/struct_type.h"
 
 namespace tint {
 
diff --git a/src/program_builder.h b/src/program_builder.h
index 984e392..a5c2c41 100644
--- a/src/program_builder.h
+++ b/src/program_builder.h
@@ -23,9 +23,7 @@
 #include "src/ast/binary_expression.h"
 #include "src/ast/bool_literal.h"
 #include "src/ast/call_expression.h"
-#include "src/ast/expression.h"
 #include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
 #include "src/ast/loop_statement.h"
 #include "src/ast/member_accessor_expression.h"
@@ -33,18 +31,11 @@
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/stride_decoration.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_member.h"
 #include "src/ast/struct_member_offset_decoration.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/diagnostic/diagnostic.h"
 #include "src/program.h"
-#include "src/semantic/info.h"
-#include "src/semantic/node.h"
-#include "src/symbol_table.h"
 #include "src/type/alias_type.h"
 #include "src/type/array_type.h"
 #include "src/type/bool_type.h"
@@ -53,7 +44,6 @@
 #include "src/type/matrix_type.h"
 #include "src/type/pointer_type.h"
 #include "src/type/struct_type.h"
-#include "src/type/type_manager.h"
 #include "src/type/u32_type.h"
 #include "src/type/vector_type.h"
 #include "src/type/void_type.h"
diff --git a/src/program_test.cc b/src/program_test.cc
index dd4e844..daa2a70 100644
--- a/src/program_test.cc
+++ b/src/program_test.cc
@@ -12,19 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/program.h"
-
-#include <sstream>
-#include <utility>
-
-#include "gmock/gmock.h"
-#include "src/ast/function.h"
 #include "src/ast/return_statement.h"
 #include "src/ast/test_helper.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 {
diff --git a/src/reader/reader.h b/src/reader/reader.h
index 402a2c5..6ea79d1 100644
--- a/src/reader/reader.h
+++ b/src/reader/reader.h
@@ -16,10 +16,7 @@
 #define SRC_READER_READER_H_
 
 #include <string>
-#include <utility>
 
-#include "src/diagnostic/diagnostic.h"
-#include "src/diagnostic/formatter.h"
 #include "src/program.h"
 
 namespace tint {
diff --git a/src/reader/spirv/construct.h b/src/reader/spirv/construct.h
index ab3c12f..0347bc3 100644
--- a/src/reader/spirv/construct.h
+++ b/src/reader/spirv/construct.h
@@ -15,9 +15,7 @@
 #ifndef SRC_READER_SPIRV_CONSTRUCT_H_
 #define SRC_READER_SPIRV_CONSTRUCT_H_
 
-#include <cstdint>
 #include <memory>
-#include <ostream>
 #include <sstream>
 #include <string>
 #include <vector>
diff --git a/src/reader/spirv/entry_point_info.h b/src/reader/spirv/entry_point_info.h
index 8256794..bf6f5c0 100644
--- a/src/reader/spirv/entry_point_info.h
+++ b/src/reader/spirv/entry_point_info.h
@@ -17,8 +17,6 @@
 
 #include <string>
 
-#include "src/ast/pipeline_stage.h"
-
 namespace tint {
 namespace reader {
 namespace spirv {
diff --git a/src/reader/spirv/enum_converter.h b/src/reader/spirv/enum_converter.h
index c5545d0..7c9d4f7 100644
--- a/src/reader/spirv/enum_converter.h
+++ b/src/reader/spirv/enum_converter.h
@@ -19,9 +19,8 @@
 #include "src/ast/builtin.h"
 #include "src/ast/pipeline_stage.h"
 #include "src/ast/storage_class.h"
-#include "src/type/storage_texture_type.h"
-#include "src/type/texture_type.h"
 #include "src/reader/spirv/fail_stream.h"
+#include "src/type/storage_texture_type.h"
 
 namespace tint {
 namespace reader {
diff --git a/src/reader/spirv/enum_converter_test.cc b/src/reader/spirv/enum_converter_test.cc
index 588c5e0..670e63d 100644
--- a/src/reader/spirv/enum_converter_test.cc
+++ b/src/reader/spirv/enum_converter_test.cc
@@ -14,12 +14,9 @@
 
 #include "src/reader/spirv/enum_converter.h"
 
-#include <ostream>
 #include <string>
 
 #include "gmock/gmock.h"
-#include "spirv/unified1/spirv.h"
-#include "src/ast/pipeline_stage.h"
 
 namespace tint {
 namespace reader {
diff --git a/src/reader/spirv/fail_stream_test.cc b/src/reader/spirv/fail_stream_test.cc
index 7ee2ab7..b533bdb 100644
--- a/src/reader/spirv/fail_stream_test.cc
+++ b/src/reader/spirv/fail_stream_test.cc
@@ -14,9 +14,6 @@
 
 #include "src/reader/spirv/fail_stream.h"
 
-#include <memory>
-#include <sstream>
-
 #include "gmock/gmock.h"
 
 namespace tint {
diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc
index 663d5cd..01e1a92 100644
--- a/src/reader/spirv/function.cc
+++ b/src/reader/spirv/function.cc
@@ -16,65 +16,23 @@
 
 #include <algorithm>
 #include <array>
-#include <cassert>
-#include <sstream>
-#include <unordered_map>
-#include <unordered_set>
-#include <utility>
-#include <vector>
 
-#include "source/opt/basic_block.h"
-#include "source/opt/function.h"
-#include "source/opt/instruction.h"
-#include "source/opt/module.h"
-#include "spirv/unified1/GLSL.std.450.h"
-#include "src/ast/array_accessor_expression.h"
 #include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
 #include "src/ast/bitcast_expression.h"
-#include "src/ast/bool_literal.h"
 #include "src/ast/break_statement.h"
-#include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/continue_statement.h"
 #include "src/ast/discard_statement.h"
-#include "src/ast/else_statement.h"
 #include "src/ast/fallthrough_statement.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
 #include "src/ast/loop_statement.h"
-#include "src/ast/member_accessor_expression.h"
 #include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/storage_class.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type_constructor_expression.h"
-#include "src/ast/uint_literal.h"
-#include "src/ast/unary_op.h"
 #include "src/ast/unary_op_expression.h"
-#include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
-#include "src/reader/spirv/construct.h"
-#include "src/reader/spirv/fail_stream.h"
-#include "src/reader/spirv/parser_impl.h"
-#include "src/semantic/intrinsic.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/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
diff --git a/src/reader/spirv/function.h b/src/reader/spirv/function.h
index 5ac476b..086a02e 100644
--- a/src/reader/spirv/function.h
+++ b/src/reader/spirv/function.h
@@ -15,36 +15,16 @@
 #ifndef SRC_READER_SPIRV_FUNCTION_H_
 #define SRC_READER_SPIRV_FUNCTION_H_
 
-#include <functional>
 #include <memory>
-#include <ostream>
 #include <string>
 #include <unordered_map>
 #include <unordered_set>
 #include <utility>
 #include <vector>
 
-#include "source/opt/basic_block.h"
-#include "source/opt/constants.h"
-#include "source/opt/function.h"
-#include "source/opt/instruction.h"
-#include "source/opt/ir_context.h"
-#include "source/opt/type_manager.h"
-#include "src/ast/case_statement.h"
-#include "src/ast/expression.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/module.h"
-#include "src/ast/statement.h"
-#include "src/ast/storage_class.h"
 #include "src/program_builder.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"
-#include "src/type/texture_type.h"
-#include "src/type/u32_type.h"
 
 namespace tint {
 namespace reader {
diff --git a/src/reader/spirv/function_arithmetic_test.cc b/src/reader/spirv/function_arithmetic_test.cc
index cfe77bc..9396ca3 100644
--- a/src/reader/spirv/function_arithmetic_test.cc
+++ b/src/reader/spirv/function_arithmetic_test.cc
@@ -12,12 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
 #include "src/reader/spirv/function.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"
 
diff --git a/src/reader/spirv/function_bit_test.cc b/src/reader/spirv/function_bit_test.cc
index 000ef59..d1db30b 100644
--- a/src/reader/spirv/function_bit_test.cc
+++ b/src/reader/spirv/function_bit_test.cc
@@ -11,12 +11,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
 #include "src/reader/spirv/function.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"
 
diff --git a/src/reader/spirv/function_call_test.cc b/src/reader/spirv/function_call_test.cc
index 9b97b1e..fbe67b8 100644
--- a/src/reader/spirv/function_call_test.cc
+++ b/src/reader/spirv/function_call_test.cc
@@ -12,12 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
 #include "src/reader/spirv/function.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"
 
diff --git a/src/reader/spirv/function_cfg_test.cc b/src/reader/spirv/function_cfg_test.cc
index 2cc9a84..d5a5756 100644
--- a/src/reader/spirv/function_cfg_test.cc
+++ b/src/reader/spirv/function_cfg_test.cc
@@ -12,14 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <sstream>
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
-#include "src/reader/spirv/construct.h"
 #include "src/reader/spirv/function.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"
 
diff --git a/src/reader/spirv/function_composite_test.cc b/src/reader/spirv/function_composite_test.cc
index 1517c8a..1478c5e 100644
--- a/src/reader/spirv/function_composite_test.cc
+++ b/src/reader/spirv/function_composite_test.cc
@@ -12,13 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
-#include "src/reader/spirv/fail_stream.h"
 #include "src/reader/spirv/function.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"
 
diff --git a/src/reader/spirv/function_conversion_test.cc b/src/reader/spirv/function_conversion_test.cc
index ec1bf40..fb65000 100644
--- a/src/reader/spirv/function_conversion_test.cc
+++ b/src/reader/spirv/function_conversion_test.cc
@@ -12,12 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
 #include "src/reader/spirv/function.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"
 
diff --git a/src/reader/spirv/function_decl_test.cc b/src/reader/spirv/function_decl_test.cc
index f7f5d61..420e520 100644
--- a/src/reader/spirv/function_decl_test.cc
+++ b/src/reader/spirv/function_decl_test.cc
@@ -12,12 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
 #include "src/reader/spirv/function.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"
 
diff --git a/src/reader/spirv/function_glsl_std_450_test.cc b/src/reader/spirv/function_glsl_std_450_test.cc
index d0c43f1..da3b7b0 100644
--- a/src/reader/spirv/function_glsl_std_450_test.cc
+++ b/src/reader/spirv/function_glsl_std_450_test.cc
@@ -12,13 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
-#include "src/reader/spirv/fail_stream.h"
 #include "src/reader/spirv/function.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"
 
diff --git a/src/reader/spirv/function_logical_test.cc b/src/reader/spirv/function_logical_test.cc
index e1c12c8..134cbdc 100644
--- a/src/reader/spirv/function_logical_test.cc
+++ b/src/reader/spirv/function_logical_test.cc
@@ -12,12 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
 #include "src/reader/spirv/function.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"
 
diff --git a/src/reader/spirv/function_memory_test.cc b/src/reader/spirv/function_memory_test.cc
index b42cb4b..5d3b255 100644
--- a/src/reader/spirv/function_memory_test.cc
+++ b/src/reader/spirv/function_memory_test.cc
@@ -12,13 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
-#include "src/demangler.h"
 #include "src/reader/spirv/function.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"
 
diff --git a/src/reader/spirv/function_misc_test.cc b/src/reader/spirv/function_misc_test.cc
index 8cf1b36..efc249a 100644
--- a/src/reader/spirv/function_misc_test.cc
+++ b/src/reader/spirv/function_misc_test.cc
@@ -12,13 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
-#include "src/ast/identifier_expression.h"
 #include "src/reader/spirv/function.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"
 
diff --git a/src/reader/spirv/function_var_test.cc b/src/reader/spirv/function_var_test.cc
index ca6f49a..790586c 100644
--- a/src/reader/spirv/function_var_test.cc
+++ b/src/reader/spirv/function_var_test.cc
@@ -12,12 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
 #include "src/reader/spirv/function.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"
 
diff --git a/src/reader/spirv/namer.h b/src/reader/spirv/namer.h
index 715e3d0..c889e83 100644
--- a/src/reader/spirv/namer.h
+++ b/src/reader/spirv/namer.h
@@ -15,7 +15,6 @@
 #ifndef SRC_READER_SPIRV_NAMER_H_
 #define SRC_READER_SPIRV_NAMER_H_
 
-#include <cstdint>
 #include <string>
 #include <unordered_map>
 #include <vector>
diff --git a/src/reader/spirv/namer_test.cc b/src/reader/spirv/namer_test.cc
index 9ebc3a7..027223a 100644
--- a/src/reader/spirv/namer_test.cc
+++ b/src/reader/spirv/namer_test.cc
@@ -14,12 +14,7 @@
 
 #include "src/reader/spirv/namer.h"
 
-#include <cstdint>
-#include <sstream>
-#include <string>
-
 #include "gmock/gmock.h"
-#include "src/reader/spirv/fail_stream.h"
 
 namespace tint {
 namespace reader {
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index 9a2855f..729e33d 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -14,71 +14,17 @@
 
 #include "src/reader/spirv/parser_impl.h"
 
-#include <cassert>
-#include <cstring>
 #include <limits>
-#include <locale>
-#include <memory>
-#include <string>
-#include <unordered_map>
-#include <unordered_set>
-#include <utility>
 
-#include "source/opt/basic_block.h"
 #include "source/opt/build_module.h"
-#include "source/opt/constants.h"
-#include "source/opt/decoration_manager.h"
-#include "source/opt/function.h"
-#include "source/opt/instruction.h"
-#include "source/opt/module.h"
-#include "source/opt/type_manager.h"
-#include "source/opt/types.h"
-#include "spirv-tools/libspirv.hpp"
-#include "src/ast/binary_expression.h"
-#include "src/ast/binding_decoration.h"
 #include "src/ast/bitcast_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/builtin.h"
-#include "src/ast/builtin_decoration.h"
 #include "src/ast/constant_id_decoration.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/group_decoration.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/stride_decoration.h"
-#include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_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/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/variable_decoration.h"
-#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 {
@@ -575,7 +521,7 @@
   if (where == inst_source_.end()) {
     return {};
   }
-  return Source{where->second};
+  return Source{where->second };
 }
 
 bool ParserImpl::ParseInternalModuleExceptFunctions() {
diff --git a/src/reader/spirv/parser_impl.h b/src/reader/spirv/parser_impl.h
index cdfa256..0747ca9 100644
--- a/src/reader/spirv/parser_impl.h
+++ b/src/reader/spirv/parser_impl.h
@@ -15,36 +15,20 @@
 #ifndef SRC_READER_SPIRV_PARSER_IMPL_H_
 #define SRC_READER_SPIRV_PARSER_IMPL_H_
 
-#include <cstdint>
 #include <memory>
-#include <sstream>
 #include <string>
 #include <unordered_map>
 #include <unordered_set>
 #include <utility>
 #include <vector>
 
-#include "source/opt/constants.h"
-#include "source/opt/decoration_manager.h"
 #include "source/opt/ir_context.h"
-#include "source/opt/module.h"
-#include "source/opt/type_manager.h"
-#include "source/opt/types.h"
-#include "spirv-tools/libspirv.hpp"
-#include "src/ast/expression.h"
-#include "src/ast/struct_member_decoration.h"
 #include "src/program_builder.h"
 #include "src/reader/reader.h"
 #include "src/reader/spirv/entry_point_info.h"
 #include "src/reader/spirv/enum_converter.h"
-#include "src/reader/spirv/fail_stream.h"
 #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.
 
diff --git a/src/reader/spirv/parser_impl_convert_member_decoration_test.cc b/src/reader/spirv/parser_impl_convert_member_decoration_test.cc
index 0551710..bd77db4 100644
--- a/src/reader/spirv/parser_impl_convert_member_decoration_test.cc
+++ b/src/reader/spirv/parser_impl_convert_member_decoration_test.cc
@@ -12,17 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <cstdint>
-#include <memory>
-#include <vector>
-
 #include "gmock/gmock.h"
-#include "spirv/unified1/spirv.h"
-#include "src/ast/struct_member_decoration.h"
-#include "src/ast/struct_member_offset_decoration.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"
 
 namespace tint {
 namespace reader {
diff --git a/src/reader/spirv/parser_impl_convert_type_test.cc b/src/reader/spirv/parser_impl_convert_type_test.cc
index cdabeb2..e4d2fba 100644
--- a/src/reader/spirv/parser_impl_convert_type_test.cc
+++ b/src/reader/spirv/parser_impl_convert_type_test.cc
@@ -12,26 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <cstdint>
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
-#include "src/ast/struct.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 {
diff --git a/src/reader/spirv/parser_impl_function_decl_test.cc b/src/reader/spirv/parser_impl_function_decl_test.cc
index d0320af..ab9da9d 100644
--- a/src/reader/spirv/parser_impl_function_decl_test.cc
+++ b/src/reader/spirv/parser_impl_function_decl_test.cc
@@ -12,13 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <sstream>
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
-#include "src/ast/module.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"
 
diff --git a/src/reader/spirv/parser_impl_get_decorations_test.cc b/src/reader/spirv/parser_impl_get_decorations_test.cc
index 113a7a7..315a46c 100644
--- a/src/reader/spirv/parser_impl_get_decorations_test.cc
+++ b/src/reader/spirv/parser_impl_get_decorations_test.cc
@@ -13,8 +13,6 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "spirv/unified1/spirv.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"
 
diff --git a/src/reader/spirv/parser_impl_handle_test.cc b/src/reader/spirv/parser_impl_handle_test.cc
index 279514d..ea2f2b8 100644
--- a/src/reader/spirv/parser_impl_handle_test.cc
+++ b/src/reader/spirv/parser_impl_handle_test.cc
@@ -12,13 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
-#include "src/demangler.h"
 #include "src/reader/spirv/function.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"
 
diff --git a/src/reader/spirv/parser_impl_import_test.cc b/src/reader/spirv/parser_impl_import_test.cc
index d45b83f..a20ca08 100644
--- a/src/reader/spirv/parser_impl_import_test.cc
+++ b/src/reader/spirv/parser_impl_import_test.cc
@@ -12,11 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <sstream>
-
 #include "gmock/gmock.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"
 
diff --git a/src/reader/spirv/parser_impl_module_var_test.cc b/src/reader/spirv/parser_impl_module_var_test.cc
index e22cb84..3af4662 100644
--- a/src/reader/spirv/parser_impl_module_var_test.cc
+++ b/src/reader/spirv/parser_impl_module_var_test.cc
@@ -12,13 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-
 #include "gmock/gmock.h"
-#include "src/ast/module.h"
-#include "src/demangler.h"
 #include "src/reader/spirv/function.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"
 
diff --git a/src/reader/spirv/parser_impl_named_types_test.cc b/src/reader/spirv/parser_impl_named_types_test.cc
index c62b71b..9f029d8 100644
--- a/src/reader/spirv/parser_impl_named_types_test.cc
+++ b/src/reader/spirv/parser_impl_named_types_test.cc
@@ -12,21 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <cstdint>
-#include <string>
-#include <vector>
-
 #include "gmock/gmock.h"
-#include "src/ast/module.h"
-#include "src/ast/struct.h"
-#include "src/demangler.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/matrix_type.h"
-#include "src/type/struct_type.h"
-#include "src/type/vector_type.h"
 
 namespace tint {
 namespace reader {
diff --git a/src/reader/spirv/parser_impl_test.cc b/src/reader/spirv/parser_impl_test.cc
index 026cfe7..72c8446 100644
--- a/src/reader/spirv/parser_impl_test.cc
+++ b/src/reader/spirv/parser_impl_test.cc
@@ -12,11 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/reader/spirv/parser_impl.h"
-
-#include <cstdint>
-#include <vector>
-
 #include "gmock/gmock.h"
 #include "src/reader/spirv/parser_impl_test_helper.h"
 #include "src/reader/spirv/spirv_tools_helpers_test.h"
diff --git a/src/reader/spirv/parser_impl_test_helper.h b/src/reader/spirv/parser_impl_test_helper.h
index e41bdbe..0c79ab8 100644
--- a/src/reader/spirv/parser_impl_test_helper.h
+++ b/src/reader/spirv/parser_impl_test_helper.h
@@ -16,12 +16,9 @@
 #define SRC_READER_SPIRV_PARSER_IMPL_TEST_HELPER_H_
 
 #include <memory>
-#include <sstream>
 #include <string>
 #include <vector>
 
-#include "gtest/gtest.h"
-#include "source/opt/ir_context.h"
 #include "src/demangler.h"
 #include "src/reader/spirv/parser_impl.h"
 
diff --git a/src/reader/spirv/parser_impl_user_name_test.cc b/src/reader/spirv/parser_impl_user_name_test.cc
index a7f50da..4c09229 100644
--- a/src/reader/spirv/parser_impl_user_name_test.cc
+++ b/src/reader/spirv/parser_impl_user_name_test.cc
@@ -12,11 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <sstream>
-
 #include "gmock/gmock.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"
 
diff --git a/src/reader/spirv/parser_test.cc b/src/reader/spirv/parser_test.cc
index 3da0fbc..cb7c49a 100644
--- a/src/reader/spirv/parser_test.cc
+++ b/src/reader/spirv/parser_test.cc
@@ -14,9 +14,6 @@
 
 #include "src/reader/spirv/parser.h"
 
-#include <cstdint>
-#include <vector>
-
 #include "gtest/gtest.h"
 
 namespace tint {
diff --git a/src/reader/spirv/spirv_tools_helpers_test.cc b/src/reader/spirv/spirv_tools_helpers_test.cc
index 4849a7a..a74f2df 100644
--- a/src/reader/spirv/spirv_tools_helpers_test.cc
+++ b/src/reader/spirv/spirv_tools_helpers_test.cc
@@ -14,10 +14,6 @@
 
 #include "src/reader/spirv/spirv_tools_helpers_test.h"
 
-#include <cstdint>
-#include <sstream>
-#include <vector>
-
 #include "gtest/gtest.h"
 #include "spirv-tools/libspirv.hpp"
 
diff --git a/src/reader/spirv/spirv_tools_helpers_test.h b/src/reader/spirv/spirv_tools_helpers_test.h
index 654d85a..050614f 100644
--- a/src/reader/spirv/spirv_tools_helpers_test.h
+++ b/src/reader/spirv/spirv_tools_helpers_test.h
@@ -15,7 +15,6 @@
 #ifndef SRC_READER_SPIRV_SPIRV_TOOLS_HELPERS_TEST_H_
 #define SRC_READER_SPIRV_SPIRV_TOOLS_HELPERS_TEST_H_
 
-#include <cstdint>
 #include <string>
 #include <vector>
 
diff --git a/src/reader/spirv/usage.h b/src/reader/spirv/usage.h
index ff6a8ef..92e6f1f 100644
--- a/src/reader/spirv/usage.h
+++ b/src/reader/spirv/usage.h
@@ -15,7 +15,6 @@
 #ifndef SRC_READER_SPIRV_USAGE_H_
 #define SRC_READER_SPIRV_USAGE_H_
 
-#include <ostream>
 #include <string>
 
 namespace tint {
diff --git a/src/reader/spirv/usage_test.cc b/src/reader/spirv/usage_test.cc
index ef50656..6ed12bc 100644
--- a/src/reader/spirv/usage_test.cc
+++ b/src/reader/spirv/usage_test.cc
@@ -13,12 +13,10 @@
 // limitations under the License.
 
 #include <algorithm>
-#include <sstream>
 #include <vector>
 
 #include "gmock/gmock.h"
 #include "src/reader/spirv/parser_impl_test_helper.h"
-#include "src/reader/spirv/usage.h"
 
 namespace tint {
 namespace reader {
diff --git a/src/reader/wgsl/lexer.cc b/src/reader/wgsl/lexer.cc
index bdee707..76cc3e9 100644
--- a/src/reader/wgsl/lexer.cc
+++ b/src/reader/wgsl/lexer.cc
@@ -14,11 +14,6 @@
 
 #include "src/reader/wgsl/lexer.h"
 
-#include <ctype.h>
-#include <errno.h>
-#include <stdlib.h>
-
-#include <cctype>
 #include <limits>
 
 namespace tint {
diff --git a/src/reader/wgsl/lexer.h b/src/reader/wgsl/lexer.h
index b7a6d1f..cec632e 100644
--- a/src/reader/wgsl/lexer.h
+++ b/src/reader/wgsl/lexer.h
@@ -18,7 +18,6 @@
 #include <string>
 
 #include "src/reader/wgsl/token.h"
-#include "src/source.h"
 
 namespace tint {
 namespace reader {
diff --git a/src/reader/wgsl/parser.h b/src/reader/wgsl/parser.h
index 4d83dcb..f913c11 100644
--- a/src/reader/wgsl/parser.h
+++ b/src/reader/wgsl/parser.h
@@ -16,7 +16,6 @@
 #define SRC_READER_WGSL_PARSER_H_
 
 #include "src/program.h"
-#include "src/source.h"
 
 namespace tint {
 namespace reader {
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index fee71da..420b528 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -14,63 +14,20 @@
 
 #include "src/reader/wgsl/parser_impl.h"
 
-#include <memory>
-#include <vector>
-
 #include "src/ast/access_decoration.h"
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/binding_decoration.h"
 #include "src/ast/bitcast_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/break_statement.h"
-#include "src/ast/builtin_decoration.h"
-#include "src/ast/call_expression.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/constant_id_decoration.h"
-#include "src/ast/continue_statement.h"
 #include "src/ast/discard_statement.h"
-#include "src/ast/else_statement.h"
 #include "src/ast/fallthrough_statement.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/group_decoration.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/ast/location_decoration.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/stride_decoration.h"
 #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_constructor_expression.h"
-#include "src/ast/type_decoration.h"
-#include "src/ast/uint_literal.h"
-#include "src/ast/unary_op.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/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 {
diff --git a/src/reader/wgsl/parser_impl.h b/src/reader/wgsl/parser_impl.h
index e6008a1..7ac2169 100644
--- a/src/reader/wgsl/parser_impl.h
+++ b/src/reader/wgsl/parser_impl.h
@@ -15,50 +15,27 @@
 #ifndef SRC_READER_WGSL_PARSER_IMPL_H_
 #define SRC_READER_WGSL_PARSER_IMPL_H_
 
-#include <cassert>
 #include <deque>
 #include <memory>
 #include <string>
-#include <type_traits>
 #include <unordered_map>
 #include <utility>
 #include <vector>
 
 #include "src/ast/access_control.h"
-#include "src/ast/array_decoration.h"
 #include "src/ast/assignment_statement.h"
 #include "src/ast/break_statement.h"
-#include "src/ast/builtin.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/case_statement.h"
-#include "src/ast/constructor_expression.h"
 #include "src/ast/continue_statement.h"
-#include "src/ast/else_statement.h"
-#include "src/ast/function.h"
 #include "src/ast/if_statement.h"
-#include "src/ast/literal.h"
 #include "src/ast/loop_statement.h"
-#include "src/ast/pipeline_stage.h"
 #include "src/ast/return_statement.h"
-#include "src/ast/statement.h"
-#include "src/ast/storage_class.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_decoration.h"
-#include "src/ast/struct_member.h"
-#include "src/ast/struct_member_decoration.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
-#include "src/ast/variable_decoration.h"
-#include "src/diagnostic/diagnostic.h"
-#include "src/diagnostic/formatter.h"
 #include "src/program_builder.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 {
diff --git a/src/reader/wgsl/parser_impl_additive_expression_test.cc b/src/reader/wgsl/parser_impl_additive_expression_test.cc
index 9360c7e..0a650fd 100644
--- a/src/reader/wgsl/parser_impl_additive_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_additive_expression_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_and_expression_test.cc b/src/reader/wgsl/parser_impl_and_expression_test.cc
index 5c0d2d0..baebcda 100644
--- a/src/reader/wgsl/parser_impl_and_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_and_expression_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_argument_expression_list_test.cc b/src/reader/wgsl/parser_impl_argument_expression_list_test.cc
index 457a322..926abc0 100644
--- a/src/reader/wgsl/parser_impl_argument_expression_list_test.cc
+++ b/src/reader/wgsl/parser_impl_argument_expression_list_test.cc
@@ -12,14 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/unary_op_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_assignment_stmt_test.cc b/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
index c762153..07c59e9 100644
--- a/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
@@ -12,15 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/literal.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_body_stmt_test.cc b/src/reader/wgsl/parser_impl_body_stmt_test.cc
index b5413ef..29acc7f 100644
--- a/src/reader/wgsl/parser_impl_body_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_body_stmt_test.cc
@@ -12,9 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
 #include "src/ast/discard_statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_break_stmt_test.cc b/src/reader/wgsl/parser_impl_break_stmt_test.cc
index 1c7b0d7..c13525f 100644
--- a/src/reader/wgsl/parser_impl_break_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_break_stmt_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/break_statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_bug_cases_test.cc b/src/reader/wgsl/parser_impl_bug_cases_test.cc
index 891c682..7d91001 100644
--- a/src/reader/wgsl/parser_impl_bug_cases_test.cc
+++ b/src/reader/wgsl/parser_impl_bug_cases_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/break_statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_call_stmt_test.cc b/src/reader/wgsl/parser_impl_call_stmt_test.cc
index 07f5b1d..e7f9ee4 100644
--- a/src/reader/wgsl/parser_impl_call_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_call_stmt_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/call_expression.h"
-#include "src/ast/call_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_case_body_test.cc b/src/reader/wgsl/parser_impl_case_body_test.cc
index f3bc05c..6edf7c5 100644
--- a/src/reader/wgsl/parser_impl_case_body_test.cc
+++ b/src/reader/wgsl/parser_impl_case_body_test.cc
@@ -12,9 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
 #include "src/ast/fallthrough_statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_const_expr_test.cc b/src/reader/wgsl/parser_impl_const_expr_test.cc
index b3d3020..0b9d2f4 100644
--- a/src/reader/wgsl/parser_impl_const_expr_test.cc
+++ b/src/reader/wgsl/parser_impl_const_expr_test.cc
@@ -12,14 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/scalar_constructor_expression.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 {
diff --git a/src/reader/wgsl/parser_impl_const_literal_test.cc b/src/reader/wgsl/parser_impl_const_literal_test.cc
index 51ee92a..da61925 100644
--- a/src/reader/wgsl/parser_impl_const_literal_test.cc
+++ b/src/reader/wgsl/parser_impl_const_literal_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/uint_literal.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_continue_stmt_test.cc b/src/reader/wgsl/parser_impl_continue_stmt_test.cc
index e9b72a1..9a27322 100644
--- a/src/reader/wgsl/parser_impl_continue_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_continue_stmt_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/continue_statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_continuing_stmt_test.cc b/src/reader/wgsl/parser_impl_continuing_stmt_test.cc
index 983d98f..22706e9 100644
--- a/src/reader/wgsl/parser_impl_continuing_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_continuing_stmt_test.cc
@@ -12,9 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
 #include "src/ast/discard_statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
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 05da401..9113040 100644
--- a/src/reader/wgsl/parser_impl_depth_texture_type_test.cc
+++ b/src/reader/wgsl/parser_impl_depth_texture_type_test.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 #include "src/type/depth_texture_type.h"
 
diff --git a/src/reader/wgsl/parser_impl_detail.h b/src/reader/wgsl/parser_impl_detail.h
index b19a523..6d5d144 100644
--- a/src/reader/wgsl/parser_impl_detail.h
+++ b/src/reader/wgsl/parser_impl_detail.h
@@ -16,7 +16,6 @@
 #define SRC_READER_WGSL_PARSER_IMPL_DETAIL_H_
 
 #include <memory>
-#include <type_traits>
 
 namespace tint {
 namespace reader {
diff --git a/src/reader/wgsl/parser_impl_else_stmt_test.cc b/src/reader/wgsl/parser_impl_else_stmt_test.cc
index a0e86a0..bd883fd 100644
--- a/src/reader/wgsl/parser_impl_else_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_else_stmt_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/else_statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_elseif_stmt_test.cc b/src/reader/wgsl/parser_impl_elseif_stmt_test.cc
index 150c7ea..15dab84 100644
--- a/src/reader/wgsl/parser_impl_elseif_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_elseif_stmt_test.cc
@@ -12,11 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/else_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_equality_expression_test.cc b/src/reader/wgsl/parser_impl_equality_expression_test.cc
index 693bef4..d23f6b6 100644
--- a/src/reader/wgsl/parser_impl_equality_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_equality_expression_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_error_msg_test.cc b/src/reader/wgsl/parser_impl_error_msg_test.cc
index e5ffb30..3fae7f6 100644
--- a/src/reader/wgsl/parser_impl_error_msg_test.cc
+++ b/src/reader/wgsl/parser_impl_error_msg_test.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_error_resync_test.cc b/src/reader/wgsl/parser_impl_error_resync_test.cc
index 010b545..ff25da4 100644
--- a/src/reader/wgsl/parser_impl_error_resync_test.cc
+++ b/src/reader/wgsl/parser_impl_error_resync_test.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc b/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc
index c28d214..08608c8 100644
--- a/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_for_stmt_test.cc b/src/reader/wgsl/parser_impl_for_stmt_test.cc
index ad2a0b7..ad77324 100644
--- a/src/reader/wgsl/parser_impl_for_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_for_stmt_test.cc
@@ -12,11 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-
-#include "gtest/gtest.h"
-#include "src/ast/block_statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_function_decl_test.cc b/src/reader/wgsl/parser_impl_function_decl_test.cc
index 637a3ff..86d0330 100644
--- a/src/reader/wgsl/parser_impl_function_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_function_decl_test.cc
@@ -12,13 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/function.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 {
diff --git a/src/reader/wgsl/parser_impl_function_decoration_list_test.cc b/src/reader/wgsl/parser_impl_function_decoration_list_test.cc
index 9fd25c5..debee2f 100644
--- a/src/reader/wgsl/parser_impl_function_decoration_list_test.cc
+++ b/src/reader/wgsl/parser_impl_function_decoration_list_test.cc
@@ -12,9 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
 #include "src/ast/workgroup_decoration.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_function_decoration_test.cc b/src/reader/wgsl/parser_impl_function_decoration_test.cc
index 13b9d45..e45f606 100644
--- a/src/reader/wgsl/parser_impl_function_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_function_decoration_test.cc
@@ -12,10 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
 #include "src/ast/stage_decoration.h"
 #include "src/ast/workgroup_decoration.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_function_header_test.cc b/src/reader/wgsl/parser_impl_function_header_test.cc
index 01e9b92..cedceb0 100644
--- a/src/reader/wgsl/parser_impl_function_header_test.cc
+++ b/src/reader/wgsl/parser_impl_function_header_test.cc
@@ -12,12 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/function.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 {
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 c080945..2779849 100644
--- a/src/reader/wgsl/parser_impl_function_type_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_function_type_decl_test.cc
@@ -12,14 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.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 {
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 2025e3b..c6f93d5 100644
--- a/src/reader/wgsl/parser_impl_global_constant_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_constant_decl_test.cc
@@ -12,12 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.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 {
diff --git a/src/reader/wgsl/parser_impl_global_decl_test.cc b/src/reader/wgsl/parser_impl_global_decl_test.cc
index 22beb2b..08a7a50 100644
--- a/src/reader/wgsl/parser_impl_global_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_decl_test.cc
@@ -12,13 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/module.h"
-#include "src/program.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 {
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 941d043..89d6909 100644
--- a/src/reader/wgsl/parser_impl_global_variable_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_variable_decl_test.cc
@@ -12,13 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/scalar_constructor_expression.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 {
diff --git a/src/reader/wgsl/parser_impl_if_stmt_test.cc b/src/reader/wgsl/parser_impl_if_stmt_test.cc
index efd4248..7be5ec6 100644
--- a/src/reader/wgsl/parser_impl_if_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_if_stmt_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/else_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
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 7f12549..872df12 100644
--- a/src/reader/wgsl/parser_impl_image_storage_type_test.cc
+++ b/src/reader/wgsl/parser_impl_image_storage_type_test.cc
@@ -12,10 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.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 {
diff --git a/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc b/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc
index 6150645..8fee841 100644
--- a/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_logical_and_expression_test.cc b/src/reader/wgsl/parser_impl_logical_and_expression_test.cc
index bec0731..f987321 100644
--- a/src/reader/wgsl/parser_impl_logical_and_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_logical_and_expression_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_logical_or_expression_test.cc b/src/reader/wgsl/parser_impl_logical_or_expression_test.cc
index 5c8e534..aa1e094 100644
--- a/src/reader/wgsl/parser_impl_logical_or_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_logical_or_expression_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_loop_stmt_test.cc b/src/reader/wgsl/parser_impl_loop_stmt_test.cc
index 2a0ba20..b55aa91 100644
--- a/src/reader/wgsl/parser_impl_loop_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_loop_stmt_test.cc
@@ -12,9 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
 #include "src/ast/discard_statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc b/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc
index a6887e6..05a3b76 100644
--- a/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_param_list_test.cc b/src/reader/wgsl/parser_impl_param_list_test.cc
index cbe3753..d4ebd03 100644
--- a/src/reader/wgsl/parser_impl_param_list_test.cc
+++ b/src/reader/wgsl/parser_impl_param_list_test.cc
@@ -12,15 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.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 {
diff --git a/src/reader/wgsl/parser_impl_paren_rhs_stmt_test.cc b/src/reader/wgsl/parser_impl_paren_rhs_stmt_test.cc
index b56de58..0f59cad 100644
--- a/src/reader/wgsl/parser_impl_paren_rhs_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_paren_rhs_stmt_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_pipeline_stage_test.cc b/src/reader/wgsl/parser_impl_pipeline_stage_test.cc
index 009d24c..fbc21f4 100644
--- a/src/reader/wgsl/parser_impl_pipeline_stage_test.cc
+++ b/src/reader/wgsl/parser_impl_pipeline_stage_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/pipeline_stage.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_postfix_expression_test.cc b/src/reader/wgsl/parser_impl_postfix_expression_test.cc
index 6bf2531..0b6eafa 100644
--- a/src/reader/wgsl/parser_impl_postfix_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_postfix_expression_test.cc
@@ -12,16 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/call_expression.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/unary_op_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_primary_expression_test.cc b/src/reader/wgsl/parser_impl_primary_expression_test.cc
index bd775d6..596c117 100644
--- a/src/reader/wgsl/parser_impl_primary_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_primary_expression_test.cc
@@ -12,20 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/binary_expression.h"
 #include "src/ast/bitcast_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.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 {
diff --git a/src/reader/wgsl/parser_impl_relational_expression_test.cc b/src/reader/wgsl/parser_impl_relational_expression_test.cc
index 77ed912..8058487 100644
--- a/src/reader/wgsl/parser_impl_relational_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_relational_expression_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
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 4c1e956..5c31846 100644
--- a/src/reader/wgsl/parser_impl_sampled_texture_type_test.cc
+++ b/src/reader/wgsl/parser_impl_sampled_texture_type_test.cc
@@ -12,10 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.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 {
diff --git a/src/reader/wgsl/parser_impl_sampler_type_test.cc b/src/reader/wgsl/parser_impl_sampler_type_test.cc
index ce98c32..46b3d3b 100644
--- a/src/reader/wgsl/parser_impl_sampler_type_test.cc
+++ b/src/reader/wgsl/parser_impl_sampler_type_test.cc
@@ -12,10 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.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 {
diff --git a/src/reader/wgsl/parser_impl_shift_expression_test.cc b/src/reader/wgsl/parser_impl_shift_expression_test.cc
index e93822e..e4d93e9 100644
--- a/src/reader/wgsl/parser_impl_shift_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_shift_expression_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_statement_test.cc b/src/reader/wgsl/parser_impl_statement_test.cc
index e2bfd20..8c79b0d 100644
--- a/src/reader/wgsl/parser_impl_statement_test.cc
+++ b/src/reader/wgsl/parser_impl_statement_test.cc
@@ -12,12 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
 #include "src/ast/discard_statement.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_statements_test.cc b/src/reader/wgsl/parser_impl_statements_test.cc
index d33176c..643d35f 100644
--- a/src/reader/wgsl/parser_impl_statements_test.cc
+++ b/src/reader/wgsl/parser_impl_statements_test.cc
@@ -12,10 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
 #include "src/ast/discard_statement.h"
-#include "src/ast/statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_storage_class_test.cc b/src/reader/wgsl/parser_impl_storage_class_test.cc
index ac37fa8..13fce4a 100644
--- a/src/reader/wgsl/parser_impl_storage_class_test.cc
+++ b/src/reader/wgsl/parser_impl_storage_class_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/storage_class.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
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 448162f..223c187 100644
--- a/src/reader/wgsl/parser_impl_storage_texture_type_test.cc
+++ b/src/reader/wgsl/parser_impl_storage_texture_type_test.cc
@@ -12,10 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.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 {
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 7693fd9..c7f588b 100644
--- a/src/reader/wgsl/parser_impl_struct_body_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_body_decl_test.cc
@@ -12,10 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.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 {
diff --git a/src/reader/wgsl/parser_impl_struct_decl_test.cc b/src/reader/wgsl/parser_impl_struct_decl_test.cc
index 219bb3b..0980087 100644
--- a/src/reader/wgsl/parser_impl_struct_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_decl_test.cc
@@ -12,11 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
-#include "src/type/struct_type.h"
 
 namespace tint {
 namespace reader {
diff --git a/src/reader/wgsl/parser_impl_struct_decoration_decl_test.cc b/src/reader/wgsl/parser_impl_struct_decoration_decl_test.cc
index 5ef5f82..8a5c4f7 100644
--- a/src/reader/wgsl/parser_impl_struct_decoration_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_decoration_decl_test.cc
@@ -12,9 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_struct_decoration_test.cc b/src/reader/wgsl/parser_impl_struct_decoration_test.cc
index e6e2cf6..15a5d25 100644
--- a/src/reader/wgsl/parser_impl_struct_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_decoration_test.cc
@@ -12,10 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_decoration.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_struct_member_decoration_decl_test.cc b/src/reader/wgsl/parser_impl_struct_member_decoration_decl_test.cc
index 9d9081b..4b88e78 100644
--- a/src/reader/wgsl/parser_impl_struct_member_decoration_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_member_decoration_decl_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/struct_member_offset_decoration.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_struct_member_decoration_test.cc b/src/reader/wgsl/parser_impl_struct_member_decoration_test.cc
index 450c3a2..c15fdf1 100644
--- a/src/reader/wgsl/parser_impl_struct_member_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_member_decoration_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/struct_member_offset_decoration.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_struct_member_test.cc b/src/reader/wgsl/parser_impl_struct_member_test.cc
index e8fd7ea..911c3be 100644
--- a/src/reader/wgsl/parser_impl_struct_member_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_member_test.cc
@@ -12,11 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/struct_member_offset_decoration.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 {
diff --git a/src/reader/wgsl/parser_impl_switch_body_test.cc b/src/reader/wgsl/parser_impl_switch_body_test.cc
index b596149..7fb4392 100644
--- a/src/reader/wgsl/parser_impl_switch_body_test.cc
+++ b/src/reader/wgsl/parser_impl_switch_body_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/case_statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_switch_stmt_test.cc b/src/reader/wgsl/parser_impl_switch_stmt_test.cc
index 9d2bfbb..5d73e04 100644
--- a/src/reader/wgsl/parser_impl_switch_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_switch_stmt_test.cc
@@ -12,10 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/case_statement.h"
-#include "src/ast/switch_statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_test.cc b/src/reader/wgsl/parser_impl_test.cc
index ff0b0f5..d85eeaa 100644
--- a/src/reader/wgsl/parser_impl_test.cc
+++ b/src/reader/wgsl/parser_impl_test.cc
@@ -12,11 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/reader/wgsl/parser_impl.h"
-
-#include "gtest/gtest.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
-#include "src/type/i32_type.h"
 
 namespace tint {
 namespace reader {
diff --git a/src/reader/wgsl/parser_impl_test_helper.h b/src/reader/wgsl/parser_impl_test_helper.h
index b61709e..0b301cb 100644
--- a/src/reader/wgsl/parser_impl_test_helper.h
+++ b/src/reader/wgsl/parser_impl_test_helper.h
@@ -21,7 +21,6 @@
 #include <vector>
 
 #include "gtest/gtest.h"
-#include "src/program_builder.h"
 #include "src/reader/wgsl/parser_impl.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 0023a1c..1cf9aab 100644
--- a/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
+++ b/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
@@ -12,17 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.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 {
diff --git a/src/reader/wgsl/parser_impl_type_alias_test.cc b/src/reader/wgsl/parser_impl_type_alias_test.cc
index 2610eac..17e2819 100644
--- a/src/reader/wgsl/parser_impl_type_alias_test.cc
+++ b/src/reader/wgsl/parser_impl_type_alias_test.cc
@@ -12,13 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.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 {
diff --git a/src/reader/wgsl/parser_impl_type_decl_test.cc b/src/reader/wgsl/parser_impl_type_decl_test.cc
index c3c08e0..ab4d9f2 100644
--- a/src/reader/wgsl/parser_impl_type_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_type_decl_test.cc
@@ -12,22 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/stride_decoration.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 {
diff --git a/src/reader/wgsl/parser_impl_unary_expression_test.cc b/src/reader/wgsl/parser_impl_unary_expression_test.cc
index 51561e5..c971a1d 100644
--- a/src/reader/wgsl/parser_impl_unary_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_unary_expression_test.cc
@@ -12,13 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/unary_op_expression.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_variable_decl_test.cc b/src/reader/wgsl/parser_impl_variable_decl_test.cc
index 51189d5..6fd1418 100644
--- a/src/reader/wgsl/parser_impl_variable_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_decl_test.cc
@@ -12,11 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.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 {
diff --git a/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc b/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc
index 3ad378c..f5f33e0 100644
--- a/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc
@@ -12,10 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/builtin_decoration.h"
-#include "src/ast/location_decoration.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_variable_decoration_test.cc b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
index d1d076f..f73d3d5 100644
--- a/src/reader/wgsl/parser_impl_variable_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/binding_decoration.h"
-#include "src/ast/builtin_decoration.h"
-#include "src/ast/group_decoration.h"
-#include "src/ast/location_decoration.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
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 df9aaec..4555eeb 100644
--- a/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
@@ -12,15 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.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 {
diff --git a/src/reader/wgsl/parser_impl_variable_stmt_test.cc b/src/reader/wgsl/parser_impl_variable_stmt_test.cc
index 1a6ed5f..c3e4d27 100644
--- a/src/reader/wgsl/parser_impl_variable_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_stmt_test.cc
@@ -12,10 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/statement.h"
-#include "src/ast/variable_decl_statement.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/parser_impl_variable_storage_decoration_test.cc b/src/reader/wgsl/parser_impl_variable_storage_decoration_test.cc
index aebbb96..a015b33 100644
--- a/src/reader/wgsl/parser_impl_variable_storage_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_storage_decoration_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/storage_class.h"
-#include "src/reader/wgsl/parser_impl.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
diff --git a/src/reader/wgsl/token.h b/src/reader/wgsl/token.h
index e27edd9..13e582e 100644
--- a/src/reader/wgsl/token.h
+++ b/src/reader/wgsl/token.h
@@ -15,9 +15,6 @@
 #ifndef SRC_READER_WGSL_TOKEN_H_
 #define SRC_READER_WGSL_TOKEN_H_
 
-#include <stddef.h>
-
-#include <ostream>
 #include <string>
 
 #include "src/source.h"
diff --git a/src/resolver/resolver.cc b/src/resolver/resolver.cc
index c652bbd..cfb3e19 100644
--- a/src/resolver/resolver.cc
+++ b/src/resolver/resolver.cc
@@ -15,57 +15,26 @@
 #include "src/resolver/resolver.h"
 
 #include <algorithm>
-#include <memory>
 #include <utility>
-#include <vector>
 
-#include "src/ast/array_accessor_expression.h"
 #include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
 #include "src/ast/bitcast_expression.h"
-#include "src/ast/block_statement.h"
 #include "src/ast/break_statement.h"
-#include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/continue_statement.h"
 #include "src/ast/discard_statement.h"
-#include "src/ast/else_statement.h"
 #include "src/ast/fallthrough_statement.h"
-#include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
 #include "src/ast/loop_statement.h"
-#include "src/ast/member_accessor_expression.h"
 #include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type_constructor_expression.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/ast/variable_decl_statement.h"
-#include "src/diagnostic/formatter.h"
-#include "src/program_builder.h"
 #include "src/semantic/call.h"
-#include "src/semantic/expression.h"
 #include "src/semantic/function.h"
-#include "src/semantic/intrinsic.h"
 #include "src/semantic/member_accessor_expression.h"
 #include "src/semantic/statement.h"
 #include "src/semantic/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/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 {
 namespace {
diff --git a/src/resolver/resolver.h b/src/resolver/resolver.h
index 2099c41..f07fab5 100644
--- a/src/resolver/resolver.h
+++ b/src/resolver/resolver.h
@@ -18,16 +18,11 @@
 #include <memory>
 #include <string>
 #include <unordered_map>
-#include <unordered_set>
 #include <vector>
 
-#include "src/ast/module.h"
-#include "src/diagnostic/diagnostic.h"
 #include "src/intrinsic_table.h"
 #include "src/program_builder.h"
 #include "src/scope_stack.h"
-#include "src/semantic/intrinsic.h"
-#include "src/type/storage_texture_type.h"
 #include "src/utils/unique_vector.h"
 
 namespace tint {
diff --git a/src/resolver/resolver_test.cc b/src/resolver/resolver_test.cc
index ab45029..d7c971d 100644
--- a/src/resolver/resolver_test.cc
+++ b/src/resolver/resolver_test.cc
@@ -14,67 +14,26 @@
 
 #include "src/resolver/resolver.h"
 
-#include <algorithm>
-#include <memory>
-#include <utility>
-#include <vector>
-
 #include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include "src/ast/array_accessor_expression.h"
 #include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
 #include "src/ast/bitcast_expression.h"
-#include "src/ast/block_statement.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/break_statement.h"
-#include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/continue_statement.h"
-#include "src/ast/else_statement.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
 #include "src/ast/intrinsic_texture_helper_test.h"
 #include "src/ast/loop_statement.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/pipeline_stage.h"
 #include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_member.h"
 #include "src/ast/switch_statement.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/program_builder.h"
 #include "src/semantic/call.h"
-#include "src/semantic/expression.h"
 #include "src/semantic/function.h"
 #include "src/semantic/member_accessor_expression.h"
 #include "src/semantic/statement.h"
 #include "src/semantic/variable.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"
 
 using ::testing::ElementsAre;
 using ::testing::HasSubstr;
diff --git a/src/scope_stack_test.cc b/src/scope_stack_test.cc
index 584af02..c373359 100644
--- a/src/scope_stack_test.cc
+++ b/src/scope_stack_test.cc
@@ -14,10 +14,7 @@
 #include "src/scope_stack.h"
 
 #include "gtest/gtest.h"
-#include "src/ast/variable.h"
 #include "src/program_builder.h"
-#include "src/symbol.h"
-#include "src/type/f32_type.h"
 
 namespace tint {
 namespace {
diff --git a/src/semantic/call_target.h b/src/semantic/call_target.h
index ce0587e..1683473 100644
--- a/src/semantic/call_target.h
+++ b/src/semantic/call_target.h
@@ -15,7 +15,6 @@
 #ifndef SRC_SEMANTIC_CALL_TARGET_H_
 #define SRC_SEMANTIC_CALL_TARGET_H_
 
-#include <utility>
 #include <vector>
 
 #include "src/semantic/node.h"
diff --git a/src/semantic/function.h b/src/semantic/function.h
index c8d119c..7cff766 100644
--- a/src/semantic/function.h
+++ b/src/semantic/function.h
@@ -19,7 +19,6 @@
 #include <vector>
 
 #include "src/semantic/call_target.h"
-#include "src/type/sampler_type.h"
 
 namespace tint {
 
diff --git a/src/semantic/intrinsic.h b/src/semantic/intrinsic.h
index 4bb0134..e8ec3a2 100644
--- a/src/semantic/intrinsic.h
+++ b/src/semantic/intrinsic.h
@@ -15,7 +15,6 @@
 #ifndef SRC_SEMANTIC_INTRINSIC_H_
 #define SRC_SEMANTIC_INTRINSIC_H_
 
-#include <ostream>
 #include <string>
 
 #include "src/semantic/call_target.h"
diff --git a/src/semantic/sem_call_target.cc b/src/semantic/sem_call_target.cc
index 10c4817..263c797 100644
--- a/src/semantic/sem_call_target.cc
+++ b/src/semantic/sem_call_target.cc
@@ -15,7 +15,6 @@
 #include "src/semantic/call_target.h"
 
 #include "src/symbol_table.h"
-#include "src/type/type.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::semantic::CallTarget);
 
diff --git a/src/semantic/sem_expression.cc b/src/semantic/sem_expression.cc
index 3f8b89a..466781b 100644
--- a/src/semantic/sem_expression.cc
+++ b/src/semantic/sem_expression.cc
@@ -14,8 +14,6 @@
 
 #include "src/semantic/expression.h"
 
-#include "src/type/type.h"
-
 TINT_INSTANTIATE_TYPEINFO(tint::semantic::Expression);
 
 namespace tint {
diff --git a/src/semantic/sem_function.cc b/src/semantic/sem_function.cc
index 83c90c3..4ae8885 100644
--- a/src/semantic/sem_function.cc
+++ b/src/semantic/sem_function.cc
@@ -14,19 +14,12 @@
 
 #include "src/semantic/function.h"
 
-#include "src/ast/binding_decoration.h"
-#include "src/ast/builtin_decoration.h"
 #include "src/ast/function.h"
-#include "src/ast/group_decoration.h"
-#include "src/ast/location_decoration.h"
-#include "src/ast/variable.h"
-#include "src/ast/variable_decoration.h"
 #include "src/semantic/variable.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/texture_type.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::semantic::Function);
 
diff --git a/src/semantic/sem_statement.cc b/src/semantic/sem_statement.cc
index b9daf6c..a614b42 100644
--- a/src/semantic/sem_statement.cc
+++ b/src/semantic/sem_statement.cc
@@ -14,8 +14,6 @@
 
 #include "src/semantic/statement.h"
 
-#include "src/type/type.h"
-
 TINT_INSTANTIATE_TYPEINFO(tint::semantic::Statement);
 
 namespace tint {
diff --git a/src/semantic/type_mappings.h b/src/semantic/type_mappings.h
index 36ad538..6b1c331 100644
--- a/src/semantic/type_mappings.h
+++ b/src/semantic/type_mappings.h
@@ -15,8 +15,6 @@
 #ifndef SRC_SEMANTIC_TYPE_MAPPINGS_H_
 #define SRC_SEMANTIC_TYPE_MAPPINGS_H_
 
-#include <type_traits>
-
 namespace tint {
 
 // Forward declarations
diff --git a/src/semantic/variable.h b/src/semantic/variable.h
index 3808b89..96f023a 100644
--- a/src/semantic/variable.h
+++ b/src/semantic/variable.h
@@ -15,13 +15,10 @@
 #ifndef SRC_SEMANTIC_VARIABLE_H_
 #define SRC_SEMANTIC_VARIABLE_H_
 
-#include <utility>
 #include <vector>
 
 #include "src/ast/storage_class.h"
 #include "src/semantic/expression.h"
-#include "src/semantic/node.h"
-#include "src/type/sampler_type.h"
 
 namespace tint {
 
diff --git a/src/source.h b/src/source.h
index 381d737..f56953c 100644
--- a/src/source.h
+++ b/src/source.h
@@ -16,9 +16,6 @@
 #ifndef SRC_SOURCE_H_
 #define SRC_SOURCE_H_
 
-#include <stddef.h>
-
-#include <ostream>
 #include <string>
 #include <vector>
 
diff --git a/src/test_main.cc b/src/test_main.cc
index 30e2645..8e56b05 100644
--- a/src/test_main.cc
+++ b/src/test_main.cc
@@ -13,8 +13,6 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include "src/debug.h"
 #include "src/utils/command.h"
 #include "src/writer/hlsl/test_helper.h"
 
diff --git a/src/traits.h b/src/traits.h
index d28e975..f35fe0f 100644
--- a/src/traits.h
+++ b/src/traits.h
@@ -16,7 +16,6 @@
 #define SRC_TRAITS_H_
 
 #include <tuple>
-#include <type_traits>
 
 namespace tint {
 namespace traits {
diff --git a/src/traits_test.cc b/src/traits_test.cc
index 8ce565c..b598298 100644
--- a/src/traits_test.cc
+++ b/src/traits_test.cc
@@ -14,8 +14,6 @@
 
 #include "src/traits.h"
 
-#include <functional>
-
 #include "gtest/gtest.h"
 
 namespace tint {
diff --git a/src/transform/bound_array_accessors.cc b/src/transform/bound_array_accessors.cc
index ec0a768..bbb50d7 100644
--- a/src/transform/bound_array_accessors.cc
+++ b/src/transform/bound_array_accessors.cc
@@ -15,40 +15,10 @@
 #include "src/transform/bound_array_accessors.h"
 
 #include <algorithm>
-#include <memory>
 #include <utility>
 
-#include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bitcast_expression.h"
-#include "src/ast/block_statement.h"
-#include "src/ast/break_statement.h"
-#include "src/ast/call_expression.h"
-#include "src/ast/call_statement.h"
-#include "src/ast/case_statement.h"
-#include "src/ast/continue_statement.h"
-#include "src/ast/discard_statement.h"
-#include "src/ast/else_statement.h"
-#include "src/ast/fallthrough_statement.h"
-#include "src/ast/if_statement.h"
-#include "src/ast/loop_statement.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/switch_statement.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/clone_context.h"
 #include "src/program_builder.h"
 #include "src/semantic/expression.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 {
diff --git a/src/transform/bound_array_accessors.h b/src/transform/bound_array_accessors.h
index 22e0ffd..d0d0a9f 100644
--- a/src/transform/bound_array_accessors.h
+++ b/src/transform/bound_array_accessors.h
@@ -15,13 +15,7 @@
 #ifndef SRC_TRANSFORM_BOUND_ARRAY_ACCESSORS_H_
 #define SRC_TRANSFORM_BOUND_ARRAY_ACCESSORS_H_
 
-#include <string>
-
 #include "src/ast/array_accessor_expression.h"
-#include "src/ast/expression.h"
-#include "src/ast/statement.h"
-#include "src/program.h"
-#include "src/scope_stack.h"
 #include "src/transform/transform.h"
 
 namespace tint {
diff --git a/src/transform/emit_vertex_point_size.cc b/src/transform/emit_vertex_point_size.cc
index 0dcc50a..319999f 100644
--- a/src/transform/emit_vertex_point_size.cc
+++ b/src/transform/emit_vertex_point_size.cc
@@ -14,20 +14,10 @@
 
 #include "src/transform/emit_vertex_point_size.h"
 
-#include <memory>
 #include <utility>
 
 #include "src/ast/assignment_statement.h"
-#include "src/ast/block_statement.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/variable.h"
-#include "src/clone_context.h"
-#include "src/program.h"
 #include "src/program_builder.h"
-#include "src/type/f32_type.h"
-#include "src/type/type_manager.h"
 
 namespace tint {
 namespace transform {
diff --git a/src/transform/first_index_offset.cc b/src/transform/first_index_offset.cc
index 6c2ecd0..6ad4a74 100644
--- a/src/transform/first_index_offset.cc
+++ b/src/transform/first_index_offset.cc
@@ -14,45 +14,12 @@
 
 #include "src/transform/first_index_offset.h"
 
-#include <cassert>
 #include <memory>
 #include <utility>
 
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bitcast_expression.h"
-#include "src/ast/break_statement.h"
-#include "src/ast/builtin_decoration.h"
-#include "src/ast/call_statement.h"
-#include "src/ast/case_statement.h"
-#include "src/ast/constructor_expression.h"
-#include "src/ast/else_statement.h"
-#include "src/ast/expression.h"
-#include "src/ast/fallthrough_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/ast/loop_statement.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_decoration.h"
-#include "src/ast/struct_member.h"
-#include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/switch_statement.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/clone_context.h"
-#include "src/program.h"
 #include "src/program_builder.h"
 #include "src/semantic/function.h"
-#include "src/type/struct_type.h"
-#include "src/type/u32_type.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::transform::FirstIndexOffset::Data);
 
diff --git a/src/transform/first_index_offset.h b/src/transform/first_index_offset.h
index 290e078..f2d04ec 100644
--- a/src/transform/first_index_offset.h
+++ b/src/transform/first_index_offset.h
@@ -18,8 +18,6 @@
 #include <string>
 
 #include "src/ast/variable_decl_statement.h"
-#include "src/program.h"
-#include "src/symbol.h"
 #include "src/transform/transform.h"
 
 namespace tint {
diff --git a/src/transform/hlsl.cc b/src/transform/hlsl.cc
index af67bcc..f634b72 100644
--- a/src/transform/hlsl.cc
+++ b/src/transform/hlsl.cc
@@ -20,7 +20,6 @@
 #include "src/program_builder.h"
 #include "src/semantic/expression.h"
 #include "src/semantic/statement.h"
-#include "src/type/array_type.h"
 
 namespace tint {
 namespace transform {
diff --git a/src/transform/hlsl_test.cc b/src/transform/hlsl_test.cc
index 3eca722..57340f1 100644
--- a/src/transform/hlsl_test.cc
+++ b/src/transform/hlsl_test.cc
@@ -14,10 +14,6 @@
 
 #include "src/transform/hlsl.h"
 
-#include <memory>
-#include <utility>
-#include <vector>
-
 #include "src/transform/test_helper.h"
 
 namespace tint {
diff --git a/src/transform/manager.cc b/src/transform/manager.cc
index e89f146..4f4fb73 100644
--- a/src/transform/manager.cc
+++ b/src/transform/manager.cc
@@ -14,8 +14,6 @@
 
 #include "src/transform/manager.h"
 
-#include "src/program_builder.h"
-
 namespace tint {
 namespace transform {
 
diff --git a/src/transform/manager.h b/src/transform/manager.h
index f2f4341..1351b0a 100644
--- a/src/transform/manager.h
+++ b/src/transform/manager.h
@@ -16,11 +16,9 @@
 #define SRC_TRANSFORM_MANAGER_H_
 
 #include <memory>
-#include <string>
 #include <utility>
 #include <vector>
 
-#include "src/diagnostic/diagnostic.h"
 #include "src/transform/transform.h"
 
 namespace tint {
diff --git a/src/transform/msl_test.cc b/src/transform/msl_test.cc
index 5390ab2..c38feb4 100644
--- a/src/transform/msl_test.cc
+++ b/src/transform/msl_test.cc
@@ -14,10 +14,7 @@
 
 #include "src/transform/msl.h"
 
-#include <memory>
 #include <string>
-#include <utility>
-#include <vector>
 
 #include "src/transform/test_helper.h"
 
diff --git a/src/transform/renamer.cc b/src/transform/renamer.cc
index b9b7404..b6f31a0 100644
--- a/src/transform/renamer.cc
+++ b/src/transform/renamer.cc
@@ -18,10 +18,8 @@
 #include <unordered_set>
 #include <utility>
 
-#include "src/ast/member_accessor_expression.h"
 #include "src/program_builder.h"
 #include "src/semantic/call.h"
-#include "src/semantic/intrinsic.h"
 #include "src/semantic/member_accessor_expression.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::transform::Renamer::Data);
diff --git a/src/transform/spirv.cc b/src/transform/spirv.cc
index a5a1228..37c002b 100644
--- a/src/transform/spirv.cc
+++ b/src/transform/spirv.cc
@@ -17,9 +17,7 @@
 #include <string>
 #include <utility>
 
-#include "src/ast/variable.h"
 #include "src/program_builder.h"
-#include "src/semantic/expression.h"
 #include "src/semantic/variable.h"
 
 namespace tint {
diff --git a/src/transform/spirv_test.cc b/src/transform/spirv_test.cc
index 4740a41..d1876d8 100644
--- a/src/transform/spirv_test.cc
+++ b/src/transform/spirv_test.cc
@@ -14,10 +14,6 @@
 
 #include "src/transform/spirv.h"
 
-#include <memory>
-#include <utility>
-#include <vector>
-
 #include "src/transform/test_helper.h"
 
 namespace tint {
diff --git a/src/transform/test_helper.h b/src/transform/test_helper.h
index 3b062d2..aa6ae96 100644
--- a/src/transform/test_helper.h
+++ b/src/transform/test_helper.h
@@ -21,8 +21,6 @@
 #include <vector>
 
 #include "gtest/gtest.h"
-#include "src/program.h"
-#include "src/program_builder.h"
 #include "src/reader/wgsl/parser.h"
 #include "src/transform/manager.h"
 #include "src/writer/wgsl/generator.h"
diff --git a/src/transform/transform.cc b/src/transform/transform.cc
index e0ab4c9..e1e8210 100644
--- a/src/transform/transform.cc
+++ b/src/transform/transform.cc
@@ -16,9 +16,6 @@
 
 #include <algorithm>
 
-#include "src/ast/block_statement.h"
-#include "src/ast/function.h"
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::transform::Data);
diff --git a/src/transform/transform.h b/src/transform/transform.h
index c82bcf6..6e51c04 100644
--- a/src/transform/transform.h
+++ b/src/transform/transform.h
@@ -16,12 +16,9 @@
 #define SRC_TRANSFORM_TRANSFORM_H_
 
 #include <memory>
-#include <string>
-#include <type_traits>
 #include <unordered_map>
 #include <utility>
 
-#include "src/diagnostic/diagnostic.h"
 #include "src/program.h"
 
 namespace tint {
diff --git a/src/transform/vertex_pulling.cc b/src/transform/vertex_pulling.cc
index 3f7f138..71e3578 100644
--- a/src/transform/vertex_pulling.cc
+++ b/src/transform/vertex_pulling.cc
@@ -16,32 +16,12 @@
 
 #include <utility>
 
-#include "src/ast/array_accessor_expression.h"
 #include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
 #include "src/ast/bitcast_expression.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/stride_decoration.h"
-#include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_decoration.h"
-#include "src/ast/struct_member.h"
-#include "src/ast/struct_member_offset_decoration.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/clone_context.h"
-#include "src/program.h"
 #include "src/program_builder.h"
 #include "src/semantic/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"
 
 namespace tint {
 namespace transform {
diff --git a/src/transform/vertex_pulling.h b/src/transform/vertex_pulling.h
index ac29cf7..bf21989 100644
--- a/src/transform/vertex_pulling.h
+++ b/src/transform/vertex_pulling.h
@@ -20,11 +20,6 @@
 #include <unordered_map>
 #include <vector>
 
-#include "src/ast/expression.h"
-#include "src/ast/function.h"
-#include "src/ast/statement.h"
-#include "src/ast/variable.h"
-#include "src/program.h"
 #include "src/transform/transform.h"
 
 namespace tint {
diff --git a/src/type/access_control_type.cc b/src/type/access_control_type.cc
index cdf034a..43c7924 100644
--- a/src/type/access_control_type.cc
+++ b/src/type/access_control_type.cc
@@ -14,9 +14,6 @@
 
 #include "src/type/access_control_type.h"
 
-#include <assert.h>
-
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::AccessControl);
diff --git a/src/type/access_control_type_test.cc b/src/type/access_control_type_test.cc
index d398fca..b6c29c1 100644
--- a/src/type/access_control_type_test.cc
+++ b/src/type/access_control_type_test.cc
@@ -14,25 +14,8 @@
 
 #include "src/type/access_control_type.h"
 
-#include <memory>
-#include <utility>
-
-#include "src/ast/storage_class.h"
-#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/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 type {
diff --git a/src/type/alias_type.cc b/src/type/alias_type.cc
index 346db1d..f5e2d2a 100644
--- a/src/type/alias_type.cc
+++ b/src/type/alias_type.cc
@@ -14,9 +14,6 @@
 
 #include "src/type/alias_type.h"
 
-#include <assert.h>
-
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::Alias);
diff --git a/src/type/alias_type.h b/src/type/alias_type.h
index 57e44d9..5361950 100644
--- a/src/type/alias_type.h
+++ b/src/type/alias_type.h
@@ -17,7 +17,6 @@
 
 #include <string>
 
-#include "src/symbol.h"
 #include "src/type/type.h"
 
 namespace tint {
diff --git a/src/type/alias_type_test.cc b/src/type/alias_type_test.cc
index 470f390..13690dd 100644
--- a/src/type/alias_type_test.cc
+++ b/src/type/alias_type_test.cc
@@ -12,27 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/type/alias_type.h"
-
-#include <memory>
-#include <utility>
-
-#include "src/ast/storage_class.h"
-#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/struct_type.h"
 #include "src/type/test_helper.h"
 #include "src/type/texture_type.h"
-#include "src/type/vector_type.h"
 
 namespace tint {
 namespace type {
diff --git a/src/type/array_type.cc b/src/type/array_type.cc
index 914b3f5..6d0b825 100644
--- a/src/type/array_type.cc
+++ b/src/type/array_type.cc
@@ -15,12 +15,8 @@
 #include "src/type/array_type.h"
 
 #include <cmath>
-#include <memory>
 
-#include "src/ast/stride_decoration.h"
-#include "src/clone_context.h"
 #include "src/program_builder.h"
-#include "src/type/vector_type.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::Array);
 
diff --git a/src/type/array_type.h b/src/type/array_type.h
index 1fccc27..27bc891 100644
--- a/src/type/array_type.h
+++ b/src/type/array_type.h
@@ -15,10 +15,7 @@
 #ifndef SRC_TYPE_ARRAY_TYPE_H_
 #define SRC_TYPE_ARRAY_TYPE_H_
 
-#include <assert.h>
-
 #include <string>
-#include <utility>
 
 #include "src/ast/array_decoration.h"
 #include "src/type/type.h"
diff --git a/src/type/array_type_test.cc b/src/type/array_type_test.cc
index 85c0655..8e2b07e 100644
--- a/src/type/array_type_test.cc
+++ b/src/type/array_type_test.cc
@@ -12,23 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/type/array_type.h"
-
-#include <memory>
-#include <utility>
-
-#include "src/ast/stride_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/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 type {
diff --git a/src/type/bool_type.cc b/src/type/bool_type.cc
index b0e6a2c..b21227d 100644
--- a/src/type/bool_type.cc
+++ b/src/type/bool_type.cc
@@ -14,7 +14,6 @@
 
 #include "src/type/bool_type.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::Bool);
diff --git a/src/type/bool_type_test.cc b/src/type/bool_type_test.cc
index 49a18f1..3a9fd2c 100644
--- a/src/type/bool_type_test.cc
+++ b/src/type/bool_type_test.cc
@@ -12,19 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/type/bool_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 type {
diff --git a/src/type/depth_texture_type.cc b/src/type/depth_texture_type.cc
index 1a8573d..e8dc4ff 100644
--- a/src/type/depth_texture_type.cc
+++ b/src/type/depth_texture_type.cc
@@ -14,10 +14,6 @@
 
 #include "src/type/depth_texture_type.h"
 
-#include <cassert>
-#include <sstream>
-
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::DepthTexture);
diff --git a/src/type/depth_texture_type_test.cc b/src/type/depth_texture_type_test.cc
index 7303930..ebb20da8 100644
--- a/src/type/depth_texture_type_test.cc
+++ b/src/type/depth_texture_type_test.cc
@@ -17,17 +17,8 @@
 #include "src/type/test_helper.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 type {
diff --git a/src/type/f32_type.cc b/src/type/f32_type.cc
index 53dfc24..8bd02ab 100644
--- a/src/type/f32_type.cc
+++ b/src/type/f32_type.cc
@@ -14,7 +14,6 @@
 
 #include "src/type/f32_type.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::F32);
diff --git a/src/type/f32_type_test.cc b/src/type/f32_type_test.cc
index 92fca64..d02d1b9 100644
--- a/src/type/f32_type_test.cc
+++ b/src/type/f32_type_test.cc
@@ -12,19 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/type/f32_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 type {
diff --git a/src/type/i32_type.cc b/src/type/i32_type.cc
index 11c61f9..78a7a7d 100644
--- a/src/type/i32_type.cc
+++ b/src/type/i32_type.cc
@@ -14,7 +14,6 @@
 
 #include "src/type/i32_type.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::I32);
diff --git a/src/type/i32_type_test.cc b/src/type/i32_type_test.cc
index 60df02f..788ea58 100644
--- a/src/type/i32_type_test.cc
+++ b/src/type/i32_type_test.cc
@@ -12,19 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/type/i32_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 type {
diff --git a/src/type/matrix_type.cc b/src/type/matrix_type.cc
index 8fbd2fd..4d6293c 100644
--- a/src/type/matrix_type.cc
+++ b/src/type/matrix_type.cc
@@ -14,12 +14,7 @@
 
 #include "src/type/matrix_type.h"
 
-#include <assert.h>
-
-#include "src/clone_context.h"
 #include "src/program_builder.h"
-#include "src/type/array_type.h"
-#include "src/type/vector_type.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::Matrix);
 
diff --git a/src/type/matrix_type_test.cc b/src/type/matrix_type_test.cc
index e7b6227..73a7d0f 100644
--- a/src/type/matrix_type_test.cc
+++ b/src/type/matrix_type_test.cc
@@ -12,19 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/type/matrix_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 type {
diff --git a/src/type/multisampled_texture_type.cc b/src/type/multisampled_texture_type.cc
index 8568c98..7037b91 100644
--- a/src/type/multisampled_texture_type.cc
+++ b/src/type/multisampled_texture_type.cc
@@ -14,10 +14,6 @@
 
 #include "src/type/multisampled_texture_type.h"
 
-#include <cassert>
-#include <sstream>
-
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::MultisampledTexture);
diff --git a/src/type/multisampled_texture_type_test.cc b/src/type/multisampled_texture_type_test.cc
index d4ac2ee..caeb3fa 100644
--- a/src/type/multisampled_texture_type_test.cc
+++ b/src/type/multisampled_texture_type_test.cc
@@ -15,19 +15,10 @@
 #include "src/type/multisampled_texture_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 type {
diff --git a/src/type/pointer_type.cc b/src/type/pointer_type.cc
index 7a7a635..7f98966 100644
--- a/src/type/pointer_type.cc
+++ b/src/type/pointer_type.cc
@@ -14,7 +14,6 @@
 
 #include "src/type/pointer_type.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::Pointer);
diff --git a/src/type/pointer_type.h b/src/type/pointer_type.h
index 9df8e73..abbef7f 100644
--- a/src/type/pointer_type.h
+++ b/src/type/pointer_type.h
@@ -15,7 +15,6 @@
 #ifndef SRC_TYPE_POINTER_TYPE_H_
 #define SRC_TYPE_POINTER_TYPE_H_
 
-#include <sstream>
 #include <string>
 
 #include "src/ast/storage_class.h"
diff --git a/src/type/pointer_type_test.cc b/src/type/pointer_type_test.cc
index dd48053..f79211c 100644
--- a/src/type/pointer_type_test.cc
+++ b/src/type/pointer_type_test.cc
@@ -12,19 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/type/pointer_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 type {
diff --git a/src/type/sampled_texture_type.cc b/src/type/sampled_texture_type.cc
index 937c331..50649ac 100644
--- a/src/type/sampled_texture_type.cc
+++ b/src/type/sampled_texture_type.cc
@@ -14,10 +14,6 @@
 
 #include "src/type/sampled_texture_type.h"
 
-#include <cassert>
-#include <sstream>
-
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::SampledTexture);
diff --git a/src/type/sampled_texture_type_test.cc b/src/type/sampled_texture_type_test.cc
index 7eee0fa..5034fb8 100644
--- a/src/type/sampled_texture_type_test.cc
+++ b/src/type/sampled_texture_type_test.cc
@@ -15,18 +15,9 @@
 #include "src/type/sampled_texture_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 type {
diff --git a/src/type/sampler_type.cc b/src/type/sampler_type.cc
index b005826..abfa64d 100644
--- a/src/type/sampler_type.cc
+++ b/src/type/sampler_type.cc
@@ -14,7 +14,6 @@
 
 #include "src/type/sampler_type.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::Sampler);
diff --git a/src/type/sampler_type.h b/src/type/sampler_type.h
index 486446b..f74d873 100644
--- a/src/type/sampler_type.h
+++ b/src/type/sampler_type.h
@@ -15,7 +15,6 @@
 #ifndef SRC_TYPE_SAMPLER_TYPE_H_
 #define SRC_TYPE_SAMPLER_TYPE_H_
 
-#include <ostream>
 #include <string>
 
 #include "src/type/type.h"
diff --git a/src/type/sampler_type_test.cc b/src/type/sampler_type_test.cc
index 2b3184b..1912857 100644
--- a/src/type/sampler_type_test.cc
+++ b/src/type/sampler_type_test.cc
@@ -12,20 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/type/sampler_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 type {
diff --git a/src/type/storage_texture_type.cc b/src/type/storage_texture_type.cc
index 488eb7a..c430ea6 100644
--- a/src/type/storage_texture_type.cc
+++ b/src/type/storage_texture_type.cc
@@ -14,10 +14,6 @@
 
 #include "src/type/storage_texture_type.h"
 
-#include <cassert>
-#include <sstream>
-
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::StorageTexture);
diff --git a/src/type/storage_texture_type_test.cc b/src/type/storage_texture_type_test.cc
index 22966f7..d7af801 100644
--- a/src/type/storage_texture_type_test.cc
+++ b/src/type/storage_texture_type_test.cc
@@ -14,22 +14,10 @@
 
 #include "src/type/storage_texture_type.h"
 
-#include <memory>
-
-#include "src/ast/identifier_expression.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"
 
 namespace tint {
 namespace type {
diff --git a/src/type/struct_type.cc b/src/type/struct_type.cc
index b8c50e6..c1bf774 100644
--- a/src/type/struct_type.cc
+++ b/src/type/struct_type.cc
@@ -15,14 +15,8 @@
 #include "src/type/struct_type.h"
 
 #include <cmath>
-#include <utility>
 
-#include "src/clone_context.h"
 #include "src/program_builder.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_TYPEINFO(tint::type::Struct);
 
diff --git a/src/type/struct_type.h b/src/type/struct_type.h
index eb0c37d..bec6782 100644
--- a/src/type/struct_type.h
+++ b/src/type/struct_type.h
@@ -15,11 +15,9 @@
 #ifndef SRC_TYPE_STRUCT_TYPE_H_
 #define SRC_TYPE_STRUCT_TYPE_H_
 
-#include <memory>
 #include <string>
 
 #include "src/ast/struct.h"
-#include "src/symbol.h"
 #include "src/type/type.h"
 
 namespace tint {
diff --git a/src/type/struct_type_test.cc b/src/type/struct_type_test.cc
index 4419587..368362e 100644
--- a/src/type/struct_type_test.cc
+++ b/src/type/struct_type_test.cc
@@ -12,25 +12,9 @@
 // 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 {
diff --git a/src/type/test_helper.h b/src/type/test_helper.h
index e09e9c3..1c08c60 100644
--- a/src/type/test_helper.h
+++ b/src/type/test_helper.h
@@ -15,8 +15,6 @@
 #ifndef SRC_TYPE_TEST_HELPER_H_
 #define SRC_TYPE_TEST_HELPER_H_
 
-#include <memory>
-#include <string>
 #include <utility>
 
 #include "gtest/gtest.h"
diff --git a/src/type/texture_type.cc b/src/type/texture_type.cc
index 8f55ad7..1f66a37 100644
--- a/src/type/texture_type.cc
+++ b/src/type/texture_type.cc
@@ -14,12 +14,6 @@
 
 #include "src/type/texture_type.h"
 
-#include <cassert>
-#include <ostream>
-
-#include "src/type/multisampled_texture_type.h"
-#include "src/type/sampled_texture_type.h"
-
 TINT_INSTANTIATE_TYPEINFO(tint::type::Texture);
 
 namespace tint {
diff --git a/src/type/type.cc b/src/type/type.cc
index b6cb59d..2f6e0dc 100644
--- a/src/type/type.cc
+++ b/src/type/type.cc
@@ -14,22 +14,17 @@
 
 #include "src/type/type.h"
 
-#include <assert.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_TYPEINFO(tint::type::Type);
 
@@ -61,9 +56,9 @@
   auto* where = this;
   while (true) {
     if (auto* alias = where->As<type::Alias>()) {
-      where = alias->type();
+          where = alias->type();
     } else if (auto* access = where->As<type::AccessControl>()) {
-      where = access->type();
+          where = access->type();
     } else {
       break;
     }
diff --git a/src/type/type_manager.cc b/src/type/type_manager.cc
index a9b1121..1f6833d 100644
--- a/src/type/type_manager.cc
+++ b/src/type/type_manager.cc
@@ -14,8 +14,6 @@
 
 #include "src/type/type_manager.h"
 
-#include <utility>
-
 namespace tint {
 namespace type {
 
diff --git a/src/type/u32_type.cc b/src/type/u32_type.cc
index 407538b..c2f029c 100644
--- a/src/type/u32_type.cc
+++ b/src/type/u32_type.cc
@@ -14,7 +14,6 @@
 
 #include "src/type/u32_type.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::U32);
diff --git a/src/type/u32_type_test.cc b/src/type/u32_type_test.cc
index b9de713..5b6db5a 100644
--- a/src/type/u32_type_test.cc
+++ b/src/type/u32_type_test.cc
@@ -12,20 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/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/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 type {
diff --git a/src/type/vector_type.cc b/src/type/vector_type.cc
index cb1ff73..3a8078f 100644
--- a/src/type/vector_type.cc
+++ b/src/type/vector_type.cc
@@ -14,10 +14,6 @@
 
 #include "src/type/vector_type.h"
 
-#include <assert.h>
-#include <cmath>
-
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::Vector);
diff --git a/src/type/vector_type_test.cc b/src/type/vector_type_test.cc
index 51dfa4b..8f13b68 100644
--- a/src/type/vector_type_test.cc
+++ b/src/type/vector_type_test.cc
@@ -12,19 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/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"
 
 namespace tint {
 namespace type {
diff --git a/src/type/void_type.cc b/src/type/void_type.cc
index df750af..f615a20 100644
--- a/src/type/void_type.cc
+++ b/src/type/void_type.cc
@@ -14,7 +14,6 @@
 
 #include "src/type/void_type.h"
 
-#include "src/clone_context.h"
 #include "src/program_builder.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::type::Void);
diff --git a/src/utils/command_posix.cc b/src/utils/command_posix.cc
index b387b60..6ec2a98 100644
--- a/src/utils/command_posix.cc
+++ b/src/utils/command_posix.cc
@@ -14,16 +14,10 @@
 
 #include "src/utils/command.h"
 
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
 #include <sys/poll.h>
 #include <sys/stat.h>
-#include <sys/types.h>
 #include <sys/wait.h>
 #include <unistd.h>
-#include <cassert>
-#include <cstring>
 #include <sstream>
 #include <vector>
 
diff --git a/src/utils/tmpfile_posix.cc b/src/utils/tmpfile_posix.cc
index 7486896..5bf7804 100644
--- a/src/utils/tmpfile_posix.cc
+++ b/src/utils/tmpfile_posix.cc
@@ -14,9 +14,7 @@
 
 #include "src/utils/tmpfile.h"
 
-#include <stdio.h>
 #include <unistd.h>
-#include <cstdio>
 
 namespace tint {
 namespace utils {
diff --git a/src/utils/unique_vector.h b/src/utils/unique_vector.h
index 36016ee..5f8ce34 100644
--- a/src/utils/unique_vector.h
+++ b/src/utils/unique_vector.h
@@ -47,7 +47,7 @@
   ConstIterator end() const { return vector.end(); }
 
   /// @returns a const reference to the internal vector
-  operator const std::vector<T> &() const { return vector; }
+  operator const std::vector<T>&() const { return vector; }
 
  private:
   std::vector<T> vector;
diff --git a/src/validator/validator.h b/src/validator/validator.h
index 65b9777..b6e6804 100644
--- a/src/validator/validator.h
+++ b/src/validator/validator.h
@@ -15,14 +15,8 @@
 #ifndef SRC_VALIDATOR_VALIDATOR_H_
 #define SRC_VALIDATOR_VALIDATOR_H_
 
-#include <memory>
 #include <string>
 
-#include "src/ast/assignment_statement.h"
-#include "src/ast/expression.h"
-#include "src/ast/statement.h"
-#include "src/diagnostic/diagnostic.h"
-#include "src/diagnostic/formatter.h"
 #include "src/program.h"
 
 namespace tint {
diff --git a/src/validator/validator_builtins_test.cc b/src/validator/validator_builtins_test.cc
index b4e5e0e..c65393b 100644
--- a/src/validator/validator_builtins_test.cc
+++ b/src/validator/validator_builtins_test.cc
@@ -12,20 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_member.h"
-#include "src/ast/struct_member_decoration.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"
 
 namespace tint {
diff --git a/src/validator/validator_control_block_test.cc b/src/validator/validator_control_block_test.cc
index 047eede..fcca90c 100644
--- a/src/validator/validator_control_block_test.cc
+++ b/src/validator/validator_control_block_test.cc
@@ -12,22 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "spirv/unified1/GLSL.std.450.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/fallthrough_statement.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/switch_statement.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/validator/validator_impl.h"
 #include "src/validator/validator_test_helper.h"
 
 namespace tint {
diff --git a/src/validator/validator_function_test.cc b/src/validator/validator_function_test.cc
index 45133b0..eb212d9 100644
--- a/src/validator/validator_function_test.cc
+++ b/src/validator/validator_function_test.cc
@@ -12,20 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "spirv/unified1/GLSL.std.450.h"
-#include "src/ast/call_statement.h"
-#include "src/ast/pipeline_stage.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.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/validator/validator_impl.h"
 #include "src/validator/validator_test_helper.h"
 
 namespace tint {
diff --git a/src/validator/validator_impl.cc b/src/validator/validator_impl.cc
index a6d9e35..ec46aa6 100644
--- a/src/validator/validator_impl.cc
+++ b/src/validator/validator_impl.cc
@@ -14,32 +14,18 @@
 
 #include "src/validator/validator_impl.h"
 
-#include <cassert>
-#include <unordered_set>
 #include <utility>
 
 #include "src/ast/call_statement.h"
 #include "src/ast/fallthrough_statement.h"
-#include "src/ast/function.h"
-#include "src/ast/int_literal.h"
-#include "src/ast/module.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/struct.h"
-#include "src/ast/switch_statement.h"
 #include "src/ast/uint_literal.h"
-#include "src/ast/variable_decl_statement.h"
-#include "src/debug.h"
 #include "src/semantic/call.h"
-#include "src/semantic/expression.h"
 #include "src/semantic/function.h"
-#include "src/semantic/intrinsic.h"
 #include "src/semantic/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"
diff --git a/src/validator/validator_impl.h b/src/validator/validator_impl.h
index 0ad3330..e5f02c3 100644
--- a/src/validator/validator_impl.h
+++ b/src/validator/validator_impl.h
@@ -16,22 +16,14 @@
 #define SRC_VALIDATOR_VALIDATOR_IMPL_H_
 
 #include <string>
-#include <unordered_map>
 #include <unordered_set>
-#include <vector>
 
 #include "src/ast/assignment_statement.h"
-#include "src/ast/call_expression.h"
-#include "src/ast/expression.h"
 #include "src/ast/identifier_expression.h"
 #include "src/ast/module.h"
 #include "src/ast/return_statement.h"
-#include "src/ast/statement.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
-#include "src/diagnostic/diagnostic.h"
-#include "src/diagnostic/formatter.h"
 #include "src/program.h"
 #include "src/scope_stack.h"
 
diff --git a/src/validator/validator_test.cc b/src/validator/validator_test.cc
index e2aaef7..f4c8cef 100644
--- a/src/validator/validator_test.cc
+++ b/src/validator/validator_test.cc
@@ -12,46 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "spirv/unified1/GLSL.std.450.h"
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/break_statement.h"
-#include "src/ast/call_expression.h"
-#include "src/ast/call_statement.h"
-#include "src/ast/case_statement.h"
-#include "src/ast/continue_statement.h"
-#include "src/ast/else_statement.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
-#include "src/ast/int_literal.h"
-#include "src/ast/loop_statement.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/pipeline_stage.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_member.h"
-#include "src/ast/switch_statement.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/validator/validator_impl.h"
 #include "src/validator/validator_test_helper.h"
 
 namespace tint {
diff --git a/src/validator/validator_test_helper.cc b/src/validator/validator_test_helper.cc
index df539ae..2efa3b9 100644
--- a/src/validator/validator_test_helper.cc
+++ b/src/validator/validator_test_helper.cc
@@ -14,8 +14,6 @@
 
 #include "src/validator/validator_test_helper.h"
 
-#include <memory>
-
 namespace tint {
 
 ValidatorTestHelper::ValidatorTestHelper() = default;
diff --git a/src/validator/validator_test_helper.h b/src/validator/validator_test_helper.h
index e8297c2..36e49a5 100644
--- a/src/validator/validator_test_helper.h
+++ b/src/validator/validator_test_helper.h
@@ -15,7 +15,6 @@
 #ifndef SRC_VALIDATOR_VALIDATOR_TEST_HELPER_H_
 #define SRC_VALIDATOR_VALIDATOR_TEST_HELPER_H_
 
-#include <functional>
 #include <memory>
 #include <utility>
 #include <vector>
@@ -23,7 +22,6 @@
 #include "gtest/gtest.h"
 #include "src/program_builder.h"
 #include "src/semantic/expression.h"
-#include "src/type/void_type.h"
 #include "src/validator/validator_impl.h"
 
 namespace tint {
diff --git a/src/validator/validator_type_test.cc b/src/validator/validator_type_test.cc
index d61934c..455e42f 100644
--- a/src/validator/validator_type_test.cc
+++ b/src/validator/validator_type_test.cc
@@ -12,23 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_member.h"
-#include "src/ast/struct_member_decoration.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"
 
-#include "src/ast/pipeline_stage.h"
 #include "src/ast/stage_decoration.h"
 namespace tint {
 namespace {
diff --git a/src/writer/append_vector.cc b/src/writer/append_vector.cc
index 95085ec..1b1a10d 100644
--- a/src/writer/append_vector.cc
+++ b/src/writer/append_vector.cc
@@ -16,11 +16,7 @@
 
 #include <utility>
 
-#include "src/ast/expression.h"
-#include "src/ast/type_constructor_expression.h"
 #include "src/semantic/expression.h"
-#include "src/semantic/info.h"
-#include "src/type/vector_type.h"
 
 namespace tint {
 namespace writer {
diff --git a/src/writer/hlsl/generator.cc b/src/writer/hlsl/generator.cc
index 15f2ee8..b3538fb 100644
--- a/src/writer/hlsl/generator.cc
+++ b/src/writer/hlsl/generator.cc
@@ -14,8 +14,6 @@
 
 #include "src/writer/hlsl/generator.h"
 
-#include <utility>
-
 namespace tint {
 namespace writer {
 namespace hlsl {
diff --git a/src/writer/hlsl/generator.h b/src/writer/hlsl/generator.h
index 63e6c3d..68313da 100644
--- a/src/writer/hlsl/generator.h
+++ b/src/writer/hlsl/generator.h
@@ -16,10 +16,8 @@
 #define SRC_WRITER_HLSL_GENERATOR_H_
 
 #include <memory>
-#include <sstream>
 #include <string>
 
-#include "src/program.h"
 #include "src/writer/hlsl/generator_impl.h"
 #include "src/writer/text.h"
 
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index 7fb193d..a8cf820 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -14,60 +14,20 @@
 
 #include "src/writer/hlsl/generator_impl.h"
 
-#include <limits>
-#include <sstream>
 #include <utility>
 #include <vector>
 
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bitcast_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/constant_id_decoration.h"
-#include "src/ast/else_statement.h"
 #include "src/ast/fallthrough_statement.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/ast/loop_statement.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/module.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/struct.h"
-#include "src/ast/switch_statement.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/debug.h"
-#include "src/program_builder.h"
 #include "src/semantic/call.h"
-#include "src/semantic/expression.h"
 #include "src/semantic/function.h"
 #include "src/semantic/member_accessor_expression.h"
 #include "src/semantic/variable.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/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/writer/append_vector.h"
 #include "src/writer/float_to_string.h"
 
diff --git a/src/writer/hlsl/generator_impl.h b/src/writer/hlsl/generator_impl.h
index 48cfafd..c967e55 100644
--- a/src/writer/hlsl/generator_impl.h
+++ b/src/writer/hlsl/generator_impl.h
@@ -19,29 +19,18 @@
 #include <unordered_map>
 #include <unordered_set>
 
-#include "src/ast/array_accessor_expression.h"
 #include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
 #include "src/ast/bitcast_expression.h"
 #include "src/ast/break_statement.h"
-#include "src/ast/call_expression.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/continue_statement.h"
 #include "src/ast/discard_statement.h"
-#include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
-#include "src/ast/literal.h"
 #include "src/ast/loop_statement.h"
-#include "src/ast/member_accessor_expression.h"
 #include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type_constructor_expression.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/program_builder.h"
 #include "src/scope_stack.h"
-#include "src/semantic/intrinsic.h"
-#include "src/type/struct_type.h"
 #include "src/writer/hlsl/namer.h"
 #include "src/writer/text_generator.h"
 
diff --git a/src/writer/hlsl/generator_impl_alias_type_test.cc b/src/writer/hlsl/generator_impl_alias_type_test.cc
index 097530e..2b1da05 100644
--- a/src/writer/hlsl/generator_impl_alias_type_test.cc
+++ b/src/writer/hlsl/generator_impl_alias_type_test.cc
@@ -12,11 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/struct.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/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 503186a..9b04593 100644
--- a/src/writer/hlsl/generator_impl_array_accessor_test.cc
+++ b/src/writer/hlsl/generator_impl_array_accessor_test.cc
@@ -12,14 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/program.h"
-#include "src/type/i32_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_assign_test.cc b/src/writer/hlsl/generator_impl_assign_test.cc
index be2f2dd..b53613d 100644
--- a/src/writer/hlsl/generator_impl_assign_test.cc
+++ b/src/writer/hlsl/generator_impl_assign_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "src/ast/assignment_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/program.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 d0137da..a64a744 100644
--- a/src/writer/hlsl/generator_impl_binary_test.cc
+++ b/src/writer/hlsl/generator_impl_binary_test.cc
@@ -12,32 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bitcast_expression.h"
-#include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/else_statement.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/function.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/type_constructor_expression.h"
-#include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
-#include "src/program.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 ed56ef3..51c367f 100644
--- a/src/writer/hlsl/generator_impl_bitcast_test.cc
+++ b/src/writer/hlsl/generator_impl_bitcast_test.cc
@@ -12,14 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "src/ast/bitcast_expression.h"
-#include "src/ast/identifier_expression.h"
-#include "src/program.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_block_test.cc b/src/writer/hlsl/generator_impl_block_test.cc
index edb9be2..851c37c 100644
--- a/src/writer/hlsl/generator_impl_block_test.cc
+++ b/src/writer/hlsl/generator_impl_block_test.cc
@@ -12,10 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "src/ast/block_statement.h"
-#include "src/ast/discard_statement.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_break_test.cc b/src/writer/hlsl/generator_impl_break_test.cc
index 36715bf..09fef93 100644
--- a/src/writer/hlsl/generator_impl_break_test.cc
+++ b/src/writer/hlsl/generator_impl_break_test.cc
@@ -12,11 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "src/ast/break_statement.h"
-#include "src/program.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 2ca0294..aa61e47 100644
--- a/src/writer/hlsl/generator_impl_call_test.cc
+++ b/src/writer/hlsl/generator_impl_call_test.cc
@@ -12,14 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/function.h"
-#include "src/ast/identifier_expression.h"
-#include "src/program.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 827ee1b..7e3c23d 100644
--- a/src/writer/hlsl/generator_impl_case_test.cc
+++ b/src/writer/hlsl/generator_impl_case_test.cc
@@ -12,15 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "src/ast/break_statement.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/fallthrough_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/program.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 a6ef210..ac9cf54 100644
--- a/src/writer/hlsl/generator_impl_cast_test.cc
+++ b/src/writer/hlsl/generator_impl_cast_test.cc
@@ -12,13 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "src/ast/identifier_expression.h"
-#include "src/ast/type_constructor_expression.h"
-#include "src/program.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 1a284c6..48352be 100644
--- a/src/writer/hlsl/generator_impl_constructor_test.cc
+++ b/src/writer/hlsl/generator_impl_constructor_test.cc
@@ -12,20 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/bool_literal.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/type_constructor_expression.h"
-#include "src/ast/uint_literal.h"
-#include "src/program.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_continue_test.cc b/src/writer/hlsl/generator_impl_continue_test.cc
index f934078..fd1cc0b 100644
--- a/src/writer/hlsl/generator_impl_continue_test.cc
+++ b/src/writer/hlsl/generator_impl_continue_test.cc
@@ -12,11 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "src/ast/continue_statement.h"
-#include "src/program.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_discard_test.cc b/src/writer/hlsl/generator_impl_discard_test.cc
index 574c397..50e4453 100644
--- a/src/writer/hlsl/generator_impl_discard_test.cc
+++ b/src/writer/hlsl/generator_impl_discard_test.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/discard_statement.h"
-#include "src/program.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc b/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc
index 82b5956..df33317 100644
--- a/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc
+++ b/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc
@@ -12,18 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <unordered_set>
-
-#include "src/ast/assignment_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/location_decoration.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/pipeline_stage.h"
-#include "src/ast/return_statement.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/variable.h"
-#include "src/program.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 92ee194..3937442 100644
--- a/src/writer/hlsl/generator_impl_function_test.cc
+++ b/src/writer/hlsl/generator_impl_function_test.cc
@@ -12,36 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/binding_decoration.h"
-#include "src/ast/call_expression.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/function.h"
-#include "src/ast/group_decoration.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/ast/location_decoration.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/pipeline_stage.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
 #include "src/ast/workgroup_decoration.h"
-#include "src/program.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/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_identifier_test.cc b/src/writer/hlsl/generator_impl_identifier_test.cc
index 0c311cc..536f5c0 100644
--- a/src/writer/hlsl/generator_impl_identifier_test.cc
+++ b/src/writer/hlsl/generator_impl_identifier_test.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/identifier_expression.h"
-#include "src/program.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_if_test.cc b/src/writer/hlsl/generator_impl_if_test.cc
index 314a103..60d39b9 100644
--- a/src/writer/hlsl/generator_impl_if_test.cc
+++ b/src/writer/hlsl/generator_impl_if_test.cc
@@ -12,11 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/else_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/ast/return_statement.h"
-#include "src/program.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_import_test.cc b/src/writer/hlsl/generator_impl_import_test.cc
index c563e2e..459396b 100644
--- a/src/writer/hlsl/generator_impl_import_test.cc
+++ b/src/writer/hlsl/generator_impl_import_test.cc
@@ -12,21 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "src/ast/call_expression.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/type_constructor_expression.h"
-#include "src/program.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/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_intrinsic_test.cc b/src/writer/hlsl/generator_impl_intrinsic_test.cc
index db4fac1..6031fd0 100644
--- a/src/writer/hlsl/generator_impl_intrinsic_test.cc
+++ b/src/writer/hlsl/generator_impl_intrinsic_test.cc
@@ -12,15 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <sstream>
-
 #include "gmock/gmock.h"
-#include "src/ast/call_expression.h"
-#include "src/ast/identifier_expression.h"
-#include "src/program.h"
 #include "src/semantic/call.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_intrinsic_texture_test.cc b/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc
index 2d8b0c9..d2f8dda 100644
--- a/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc
+++ b/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc
@@ -12,16 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
 #include "src/ast/call_statement.h"
 #include "src/ast/intrinsic_texture_helper_test.h"
 #include "src/ast/stage_decoration.h"
-#include "src/type/depth_texture_type.h"
-#include "src/type/multisampled_texture_type.h"
-#include "src/type/sampled_texture_type.h"
-#include "src/writer/hlsl/generator_impl.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_loop_test.cc b/src/writer/hlsl/generator_impl_loop_test.cc
index 1313f17..ff38720 100644
--- a/src/writer/hlsl/generator_impl_loop_test.cc
+++ b/src/writer/hlsl/generator_impl_loop_test.cc
@@ -12,18 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "src/ast/assignment_statement.h"
-#include "src/ast/discard_statement.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/loop_statement.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
-#include "src/program.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 2f3a1f3..5c42ab2 100644
--- a/src/writer/hlsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/hlsl/generator_impl_member_accessor_test.cc
@@ -12,23 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/stride_decoration.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_member.h"
-#include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/type_constructor_expression.h"
-#include "src/ast/variable.h"
-#include "src/program.h"
-#include "src/type/struct_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_module_constant_test.cc b/src/writer/hlsl/generator_impl_module_constant_test.cc
index ca988df..e25125a 100644
--- a/src/writer/hlsl/generator_impl_module_constant_test.cc
+++ b/src/writer/hlsl/generator_impl_module_constant_test.cc
@@ -12,17 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
 #include "src/ast/constant_id_decoration.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/type_constructor_expression.h"
-#include "src/ast/variable.h"
-#include "src/program.h"
-#include "src/type/array_type.h"
-#include "src/type/f32_type.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_return_test.cc b/src/writer/hlsl/generator_impl_return_test.cc
index 7545928..48c31c6 100644
--- a/src/writer/hlsl/generator_impl_return_test.cc
+++ b/src/writer/hlsl/generator_impl_return_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "src/ast/identifier_expression.h"
-#include "src/ast/return_statement.h"
-#include "src/program.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_sanitizer_test.cc b/src/writer/hlsl/generator_impl_sanitizer_test.cc
index be4e677..d10d599 100644
--- a/src/writer/hlsl/generator_impl_sanitizer_test.cc
+++ b/src/writer/hlsl/generator_impl_sanitizer_test.cc
@@ -12,14 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "src/ast/identifier_expression.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/unary_op_expression.h"
 #include "src/ast/variable_decl_statement.h"
-#include "src/program.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/hlsl/generator_impl_switch_test.cc b/src/writer/hlsl/generator_impl_switch_test.cc
index 8106f85..ba86e74 100644
--- a/src/writer/hlsl/generator_impl_switch_test.cc
+++ b/src/writer/hlsl/generator_impl_switch_test.cc
@@ -12,15 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "src/ast/break_statement.h"
-#include "src/ast/case_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/switch_statement.h"
-#include "src/program.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 0231793..577d40e 100644
--- a/src/writer/hlsl/generator_impl_test.cc
+++ b/src/writer/hlsl/generator_impl_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "src/ast/function.h"
-#include "src/ast/identifier_expression.h"
-#include "src/program.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 aa01636..bcb58e2 100644
--- a/src/writer/hlsl/generator_impl_type_test.cc
+++ b/src/writer/hlsl/generator_impl_type_test.cc
@@ -12,29 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_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/program.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 {
diff --git a/src/writer/hlsl/generator_impl_unary_op_test.cc b/src/writer/hlsl/generator_impl_unary_op_test.cc
index 86704d2..2a393d3 100644
--- a/src/writer/hlsl/generator_impl_unary_op_test.cc
+++ b/src/writer/hlsl/generator_impl_unary_op_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "src/ast/identifier_expression.h"
-#include "src/ast/unary_op_expression.h"
-#include "src/program.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
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 20ec539..8ffce85 100644
--- a/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc
@@ -12,17 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "src/ast/identifier_expression.h"
-#include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
-#include "src/program.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/hlsl/test_helper.h b/src/writer/hlsl/test_helper.h
index 1d2db74..3d07994 100644
--- a/src/writer/hlsl/test_helper.h
+++ b/src/writer/hlsl/test_helper.h
@@ -16,13 +16,10 @@
 #define SRC_WRITER_HLSL_TEST_HELPER_H_
 
 #include <memory>
-#include <sstream>
 #include <string>
 #include <utility>
 
 #include "gtest/gtest.h"
-#include "src/diagnostic/formatter.h"
-#include "src/program_builder.h"
 #include "src/transform/hlsl.h"
 #include "src/writer/hlsl/generator_impl.h"
 
diff --git a/src/writer/msl/generator.cc b/src/writer/msl/generator.cc
index 66b609b..9fc9159 100644
--- a/src/writer/msl/generator.cc
+++ b/src/writer/msl/generator.cc
@@ -14,8 +14,6 @@
 
 #include "src/writer/msl/generator.h"
 
-#include <utility>
-
 namespace tint {
 namespace writer {
 namespace msl {
diff --git a/src/writer/msl/generator.h b/src/writer/msl/generator.h
index a677958..1a3cb14 100644
--- a/src/writer/msl/generator.h
+++ b/src/writer/msl/generator.h
@@ -18,7 +18,6 @@
 #include <memory>
 #include <string>
 
-#include "src/program.h"
 #include "src/writer/msl/generator_impl.h"
 #include "src/writer/text.h"
 
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index f2beb98..309cccb 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -15,44 +15,20 @@
 #include "src/writer/msl/generator_impl.h"
 
 #include <algorithm>
-#include <limits>
 #include <utility>
 #include <vector>
 
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bitcast_expression.h"
-#include "src/ast/block_statement.h"
 #include "src/ast/bool_literal.h"
-#include "src/ast/break_statement.h"
-#include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/constant_id_decoration.h"
-#include "src/ast/continue_statement.h"
-#include "src/ast/else_statement.h"
 #include "src/ast/fallthrough_statement.h"
 #include "src/ast/float_literal.h"
-#include "src/ast/function.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/ast/location_decoration.h"
-#include "src/ast/loop_statement.h"
-#include "src/ast/member_accessor_expression.h"
 #include "src/ast/module.h"
-#include "src/ast/return_statement.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/switch_statement.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/debug.h"
-#include "src/program.h"
 #include "src/semantic/call.h"
-#include "src/semantic/expression.h"
 #include "src/semantic/function.h"
 #include "src/semantic/member_accessor_expression.h"
 #include "src/semantic/variable.h"
@@ -67,9 +43,7 @@
 #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"
diff --git a/src/writer/msl/generator_impl.h b/src/writer/msl/generator_impl.h
index 5cbc30f..07c90e9 100644
--- a/src/writer/msl/generator_impl.h
+++ b/src/writer/msl/generator_impl.h
@@ -15,7 +15,6 @@
 #ifndef SRC_WRITER_MSL_GENERATOR_IMPL_H_
 #define SRC_WRITER_MSL_GENERATOR_IMPL_H_
 
-#include <sstream>
 #include <string>
 #include <unordered_map>
 
@@ -24,14 +23,9 @@
 #include "src/ast/binary_expression.h"
 #include "src/ast/bitcast_expression.h"
 #include "src/ast/break_statement.h"
-#include "src/ast/call_expression.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/continue_statement.h"
 #include "src/ast/discard_statement.h"
-#include "src/ast/else_statement.h"
-#include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
-#include "src/ast/literal.h"
 #include "src/ast/loop_statement.h"
 #include "src/ast/member_accessor_expression.h"
 #include "src/ast/return_statement.h"
@@ -41,7 +35,6 @@
 #include "src/ast/unary_op_expression.h"
 #include "src/program.h"
 #include "src/scope_stack.h"
-#include "src/semantic/intrinsic.h"
 #include "src/type/struct_type.h"
 #include "src/writer/text_generator.h"
 
diff --git a/src/writer/msl/generator_impl_alias_type_test.cc b/src/writer/msl/generator_impl_alias_type_test.cc
index 06ad36c..b66fbb7 100644
--- a/src/writer/msl/generator_impl_alias_type_test.cc
+++ b/src/writer/msl/generator_impl_alias_type_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_member.h"
-#include "src/program.h"
-#include "src/type/struct_type.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_array_accessor_test.cc b/src/writer/msl/generator_impl_array_accessor_test.cc
index 3ce8bb5..8709f14 100644
--- a/src/writer/msl/generator_impl_array_accessor_test.cc
+++ b/src/writer/msl/generator_impl_array_accessor_test.cc
@@ -12,16 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/program.h"
-#include "src/type/i32_type.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_assign_test.cc b/src/writer/msl/generator_impl_assign_test.cc
index a730acd..cbe04fc 100644
--- a/src/writer/msl/generator_impl_assign_test.cc
+++ b/src/writer/msl/generator_impl_assign_test.cc
@@ -12,14 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "gtest/gtest.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/program.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_binary_test.cc b/src/writer/msl/generator_impl_binary_test.cc
index 75fb8ea..9a3394e 100644
--- a/src/writer/msl/generator_impl_binary_test.cc
+++ b/src/writer/msl/generator_impl_binary_test.cc
@@ -12,13 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/identifier_expression.h"
-#include "src/program.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_bitcast_test.cc b/src/writer/msl/generator_impl_bitcast_test.cc
index 91a1ce2..d5a74d5 100644
--- a/src/writer/msl/generator_impl_bitcast_test.cc
+++ b/src/writer/msl/generator_impl_bitcast_test.cc
@@ -12,14 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/bitcast_expression.h"
-#include "src/ast/identifier_expression.h"
-#include "src/program.h"
-#include "src/type/f32_type.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_block_test.cc b/src/writer/msl/generator_impl_block_test.cc
index c459ff0..934611e 100644
--- a/src/writer/msl/generator_impl_block_test.cc
+++ b/src/writer/msl/generator_impl_block_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/block_statement.h"
-#include "src/ast/discard_statement.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_break_test.cc b/src/writer/msl/generator_impl_break_test.cc
index e8047ca..4db35c3 100644
--- a/src/writer/msl/generator_impl_break_test.cc
+++ b/src/writer/msl/generator_impl_break_test.cc
@@ -12,13 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "gtest/gtest.h"
-#include "src/ast/break_statement.h"
-#include "src/program.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_call_test.cc b/src/writer/msl/generator_impl_call_test.cc
index 8a70461..34a313d 100644
--- a/src/writer/msl/generator_impl_call_test.cc
+++ b/src/writer/msl/generator_impl_call_test.cc
@@ -12,16 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/function.h"
-#include "src/ast/identifier_expression.h"
-#include "src/program.h"
-#include "src/type/void_type.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_case_test.cc b/src/writer/msl/generator_impl_case_test.cc
index 38b7993..3349a34 100644
--- a/src/writer/msl/generator_impl_case_test.cc
+++ b/src/writer/msl/generator_impl_case_test.cc
@@ -12,17 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/break_statement.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/fallthrough_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/program.h"
-#include "src/type/i32_type.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_cast_test.cc b/src/writer/msl/generator_impl_cast_test.cc
index f22ecbd..ebb1bd7 100644
--- a/src/writer/msl/generator_impl_cast_test.cc
+++ b/src/writer/msl/generator_impl_cast_test.cc
@@ -12,15 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/type_constructor_expression.h"
-#include "src/program.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"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_constructor_test.cc b/src/writer/msl/generator_impl_constructor_test.cc
index 3c9952c..8a73c1c 100644
--- a/src/writer/msl/generator_impl_constructor_test.cc
+++ b/src/writer/msl/generator_impl_constructor_test.cc
@@ -12,22 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/type_constructor_expression.h"
-#include "src/ast/uint_literal.h"
-#include "src/program.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"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_continue_test.cc b/src/writer/msl/generator_impl_continue_test.cc
index 45b42ef..4f9f50f 100644
--- a/src/writer/msl/generator_impl_continue_test.cc
+++ b/src/writer/msl/generator_impl_continue_test.cc
@@ -12,13 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "gtest/gtest.h"
-#include "src/ast/continue_statement.h"
-#include "src/program.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_discard_test.cc b/src/writer/msl/generator_impl_discard_test.cc
index e624914..a3bb755 100644
--- a/src/writer/msl/generator_impl_discard_test.cc
+++ b/src/writer/msl/generator_impl_discard_test.cc
@@ -12,10 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/discard_statement.h"
-#include "src/program.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
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 d78868b..4f9ac96 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
@@ -12,22 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/location_decoration.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/pipeline_stage.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/variable.h"
-#include "src/program.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/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_function_test.cc b/src/writer/msl/generator_impl_function_test.cc
index f30f4db..d117e1d 100644
--- a/src/writer/msl/generator_impl_function_test.cc
+++ b/src/writer/msl/generator_impl_function_test.cc
@@ -12,39 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/binding_decoration.h"
-#include "src/ast/call_expression.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/function.h"
-#include "src/ast/group_decoration.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/ast/location_decoration.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/pipeline_stage.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/struct.h"
 #include "src/ast/struct_block_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/variable.h"
 #include "src/ast/variable_decl_statement.h"
-#include "src/program.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/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_identifier_test.cc b/src/writer/msl/generator_impl_identifier_test.cc
index a4b1897..b02bf1b 100644
--- a/src/writer/msl/generator_impl_identifier_test.cc
+++ b/src/writer/msl/generator_impl_identifier_test.cc
@@ -12,10 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/identifier_expression.h"
-#include "src/program.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_if_test.cc b/src/writer/msl/generator_impl_if_test.cc
index ec8771c..c4c6ff4 100644
--- a/src/writer/msl/generator_impl_if_test.cc
+++ b/src/writer/msl/generator_impl_if_test.cc
@@ -12,13 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/else_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/ast/return_statement.h"
-#include "src/program.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_import_test.cc b/src/writer/msl/generator_impl_import_test.cc
index d0c9784..6841432 100644
--- a/src/writer/msl/generator_impl_import_test.cc
+++ b/src/writer/msl/generator_impl_import_test.cc
@@ -12,24 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "gtest/gtest.h"
-#include "src/ast/call_expression.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/type_constructor_expression.h"
-#include "src/program.h"
 #include "src/semantic/call.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/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_intrinsic_test.cc b/src/writer/msl/generator_impl_intrinsic_test.cc
index 3960fa8..3bdfe3b 100644
--- a/src/writer/msl/generator_impl_intrinsic_test.cc
+++ b/src/writer/msl/generator_impl_intrinsic_test.cc
@@ -12,16 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <sstream>
-
-#include "gtest/gtest.h"
-#include "src/ast/call_expression.h"
-#include "src/ast/identifier_expression.h"
-#include "src/program.h"
 #include "src/semantic/call.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"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_intrinsic_texture_test.cc b/src/writer/msl/generator_impl_intrinsic_texture_test.cc
index 767ec7c..a2f9201 100644
--- a/src/writer/msl/generator_impl_intrinsic_texture_test.cc
+++ b/src/writer/msl/generator_impl_intrinsic_texture_test.cc
@@ -12,14 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
 #include "src/ast/intrinsic_texture_helper_test.h"
-#include "src/type/depth_texture_type.h"
-#include "src/type/multisampled_texture_type.h"
-#include "src/type/sampled_texture_type.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_loop_test.cc b/src/writer/msl/generator_impl_loop_test.cc
index b21c1de..da4e36d 100644
--- a/src/writer/msl/generator_impl_loop_test.cc
+++ b/src/writer/msl/generator_impl_loop_test.cc
@@ -12,20 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/discard_statement.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/loop_statement.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
-#include "src/program.h"
-#include "src/type/f32_type.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_member_accessor_test.cc b/src/writer/msl/generator_impl_member_accessor_test.cc
index d712c75..4f97d59 100644
--- a/src/writer/msl/generator_impl_member_accessor_test.cc
+++ b/src/writer/msl/generator_impl_member_accessor_test.cc
@@ -12,13 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/program.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_module_constant_test.cc b/src/writer/msl/generator_impl_module_constant_test.cc
index c59527b..d7873b2 100644
--- a/src/writer/msl/generator_impl_module_constant_test.cc
+++ b/src/writer/msl/generator_impl_module_constant_test.cc
@@ -12,19 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "gtest/gtest.h"
 #include "src/ast/constant_id_decoration.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/type_constructor_expression.h"
-#include "src/ast/variable.h"
-#include "src/program.h"
-#include "src/type/array_type.h"
-#include "src/type/f32_type.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_return_test.cc b/src/writer/msl/generator_impl_return_test.cc
index 342600c..90896bf 100644
--- a/src/writer/msl/generator_impl_return_test.cc
+++ b/src/writer/msl/generator_impl_return_test.cc
@@ -12,14 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "gtest/gtest.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/return_statement.h"
-#include "src/program.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_switch_test.cc b/src/writer/msl/generator_impl_switch_test.cc
index 42f4a8b..b35a6df 100644
--- a/src/writer/msl/generator_impl_switch_test.cc
+++ b/src/writer/msl/generator_impl_switch_test.cc
@@ -12,17 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/break_statement.h"
-#include "src/ast/case_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/switch_statement.h"
-#include "src/program.h"
-#include "src/type/i32_type.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_test.cc b/src/writer/msl/generator_impl_test.cc
index 523ecf3..ffe023c 100644
--- a/src/writer/msl/generator_impl_test.cc
+++ b/src/writer/msl/generator_impl_test.cc
@@ -12,31 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/writer/msl/generator_impl.h"
-
-#include <memory>
-#include <utility>
-
-#include "gtest/gtest.h"
-#include "src/ast/function.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/pipeline_stage.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_member.h"
-#include "src/ast/struct_member_offset_decoration.h"
-#include "src/program.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/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_type_test.cc b/src/writer/msl/generator_impl_type_test.cc
index 7aacb37..51bafce 100644
--- a/src/writer/msl/generator_impl_type_test.cc
+++ b/src/writer/msl/generator_impl_type_test.cc
@@ -12,31 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_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/program.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/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/msl/generator_impl_unary_op_test.cc b/src/writer/msl/generator_impl_unary_op_test.cc
index 40e4aa9..56fd091 100644
--- a/src/writer/msl/generator_impl_unary_op_test.cc
+++ b/src/writer/msl/generator_impl_unary_op_test.cc
@@ -12,14 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "gtest/gtest.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/unary_op_expression.h"
-#include "src/program.h"
-#include "src/writer/msl/generator_impl.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
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 22d202b..24e2ed2 100644
--- a/src/writer/msl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/msl/generator_impl_variable_decl_statement_test.cc
@@ -12,25 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "gtest/gtest.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_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/variable.h"
 #include "src/ast/variable_decl_statement.h"
-#include "src/program.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"
 
 namespace tint {
diff --git a/src/writer/msl/test_helper.h b/src/writer/msl/test_helper.h
index c0024d4..4241036 100644
--- a/src/writer/msl/test_helper.h
+++ b/src/writer/msl/test_helper.h
@@ -19,8 +19,6 @@
 #include <utility>
 
 #include "gtest/gtest.h"
-#include "src/ast/module.h"
-#include "src/diagnostic/formatter.h"
 #include "src/program_builder.h"
 #include "src/writer/msl/generator_impl.h"
 
diff --git a/src/writer/spirv/binary_writer_test.cc b/src/writer/spirv/binary_writer_test.cc
index b69c72a..392fae7 100644
--- a/src/writer/spirv/binary_writer_test.cc
+++ b/src/writer/spirv/binary_writer_test.cc
@@ -12,13 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/writer/spirv/binary_writer.h"
-
-#include <cstring>
-
-#include "gtest/gtest.h"
-#include "spirv/unified1/spirv.hpp11"
-#include "src/writer/spirv/builder.h"
 #include "src/writer/spirv/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 0d673f7..b6dac62 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -14,73 +14,20 @@
 #include "src/writer/spirv/builder.h"
 
 #include <algorithm>
-#include <iostream>
 #include <limits>
-#include <sstream>
 #include <utility>
 
 #include "spirv/unified1/GLSL.std.450.h"
-#include "spirv/unified1/spirv.h"
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/binding_decoration.h"
-#include "src/ast/bitcast_expression.h"
-#include "src/ast/block_statement.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/builtin_decoration.h"
-#include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/constant_id_decoration.h"
-#include "src/ast/constructor_expression.h"
-#include "src/ast/else_statement.h"
 #include "src/ast/fallthrough_statement.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/group_decoration.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/ast/location_decoration.h"
-#include "src/ast/loop_statement.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/module.h"
 #include "src/ast/null_literal.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_member.h"
-#include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/switch_statement.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/debug.h"
-#include "src/program.h"
 #include "src/semantic/call.h"
-#include "src/semantic/expression.h"
 #include "src/semantic/function.h"
-#include "src/semantic/intrinsic.h"
 #include "src/semantic/variable.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/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 {
diff --git a/src/writer/spirv/builder.h b/src/writer/spirv/builder.h
index bba8bd5..90ddf88 100644
--- a/src/writer/spirv/builder.h
+++ b/src/writer/spirv/builder.h
@@ -15,46 +15,28 @@
 #ifndef SRC_WRITER_SPIRV_BUILDER_H_
 #define SRC_WRITER_SPIRV_BUILDER_H_
 
-#include <functional>
 #include <string>
 #include <unordered_map>
 #include <unordered_set>
 #include <vector>
 
 #include "spirv/unified1/spirv.h"
-#include "src/ast/array_accessor_expression.h"
 #include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
 #include "src/ast/bitcast_expression.h"
 #include "src/ast/break_statement.h"
-#include "src/ast/builtin.h"
-#include "src/ast/call_expression.h"
 #include "src/ast/continue_statement.h"
 #include "src/ast/discard_statement.h"
-#include "src/ast/else_statement.h"
-#include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
-#include "src/ast/literal.h"
 #include "src/ast/loop_statement.h"
-#include "src/ast/member_accessor_expression.h"
 #include "src/ast/return_statement.h"
-#include "src/ast/struct_member.h"
 #include "src/ast/switch_statement.h"
-#include "src/ast/type_constructor_expression.h"
 #include "src/ast/unary_op_expression.h"
 #include "src/ast/variable_decl_statement.h"
 #include "src/program_builder.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/type_manager.h"
-#include "src/type/vector_type.h"
 #include "src/writer/spirv/function.h"
-#include "src/writer/spirv/instruction.h"
 
 namespace tint {
 
diff --git a/src/writer/spirv/builder_accessor_expression_test.cc b/src/writer/spirv/builder_accessor_expression_test.cc
index 6081637..eaa79d8 100644
--- a/src/writer/spirv/builder_accessor_expression_test.cc
+++ b/src/writer/spirv/builder_accessor_expression_test.cc
@@ -12,28 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_member.h"
-#include "src/ast/type_constructor_expression.h"
-#include "src/ast/uint_literal.h"
-#include "src/ast/variable.h"
-#include "src/program.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/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_assign_test.cc b/src/writer/spirv/builder_assign_test.cc
index 016e082..805a96f 100644
--- a/src/writer/spirv/builder_assign_test.cc
+++ b/src/writer/spirv/builder_assign_test.cc
@@ -12,24 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gmock/gmock.h"
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_member.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/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_binary_expression_test.cc b/src/writer/spirv/builder_binary_expression_test.cc
index f5e0afc..6a44c9a 100644
--- a/src/writer/spirv/builder_binary_expression_test.cc
+++ b/src/writer/spirv/builder_binary_expression_test.cc
@@ -12,24 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.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/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_bitcast_expression_test.cc b/src/writer/spirv/builder_bitcast_expression_test.cc
index a8e5423..a692932 100644
--- a/src/writer/spirv/builder_bitcast_expression_test.cc
+++ b/src/writer/spirv/builder_bitcast_expression_test.cc
@@ -12,14 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/bitcast_expression.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/program.h"
-#include "src/type/f32_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_block_test.cc b/src/writer/spirv/builder_block_test.cc
index 04347b7..54f3e0a 100644
--- a/src/writer/spirv/builder_block_test.cc
+++ b/src/writer/spirv/builder_block_test.cc
@@ -12,17 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/block_statement.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/variable_decl_statement.h"
-#include "src/type/f32_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_call_test.cc b/src/writer/spirv/builder_call_test.cc
index eba20c6..0d384b6 100644
--- a/src/writer/spirv/builder_call_test.cc
+++ b/src/writer/spirv/builder_call_test.cc
@@ -13,21 +13,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/type/f32_type.h"
-#include "src/type/i32_type.h"
-#include "src/type/void_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_constructor_expression_test.cc b/src/writer/spirv/builder_constructor_expression_test.cc
index d2a14ef..d1272bf 100644
--- a/src/writer/spirv/builder_constructor_expression_test.cc
+++ b/src/writer/spirv/builder_constructor_expression_test.cc
@@ -12,32 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-
-#include "gmock/gmock.h"
-#include "spirv/unified1/spirv.h"
-#include "spirv/unified1/spirv.hpp11"
-#include "src/ast/binary_expression.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_decoration.h"
-#include "src/ast/struct_member.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/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_discard_test.cc b/src/writer/spirv/builder_discard_test.cc
index 67abbe7..938a130 100644
--- a/src/writer/spirv/builder_discard_test.cc
+++ b/src/writer/spirv/builder_discard_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/discard_statement.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_format_conversion_test.cc b/src/writer/spirv/builder_format_conversion_test.cc
index 0ad7697..c5f3994 100644
--- a/src/writer/spirv/builder_format_conversion_test.cc
+++ b/src/writer/spirv/builder_format_conversion_test.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.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_function_decoration_test.cc b/src/writer/spirv/builder_function_decoration_test.cc
index a64dc69..12afe06 100644
--- a/src/writer/spirv/builder_function_decoration_test.cc
+++ b/src/writer/spirv/builder_function_decoration_test.cc
@@ -12,20 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-
-#include "gtest/gtest.h"
-#include "spirv/unified1/spirv.h"
-#include "spirv/unified1/spirv.hpp11"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/function.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/pipeline_stage.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/variable.h"
 #include "src/ast/workgroup_decoration.h"
-#include "src/semantic/function.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_function_test.cc b/src/writer/spirv/builder_function_test.cc
index 003298a..785ca0c 100644
--- a/src/writer/spirv/builder_function_test.cc
+++ b/src/writer/spirv/builder_function_test.cc
@@ -12,28 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <string>
-
-#include "gtest/gtest.h"
-#include "spirv/unified1/spirv.h"
-#include "spirv/unified1/spirv.hpp11"
-#include "src/ast/discard_statement.h"
-#include "src/ast/function.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/return_statement.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_member_offset_decoration.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/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_function_variable_test.cc b/src/writer/spirv/builder_function_variable_test.cc
index d797882..fc9cd26 100644
--- a/src/writer/spirv/builder_function_variable_test.cc
+++ b/src/writer/spirv/builder_function_variable_test.cc
@@ -12,27 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/binding_decoration.h"
-#include "src/ast/builtin.h"
-#include "src/ast/builtin_decoration.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/group_decoration.h"
-#include "src/ast/location_decoration.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/storage_class.h"
-#include "src/ast/struct.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/f32_type.h"
-#include "src/type/struct_type.h"
-#include "src/type/vector_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_global_variable_test.cc b/src/writer/spirv/builder_global_variable_test.cc
index 07dd913..de729c7 100644
--- a/src/writer/spirv/builder_global_variable_test.cc
+++ b/src/writer/spirv/builder_global_variable_test.cc
@@ -12,33 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/binding_decoration.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/builtin.h"
-#include "src/ast/builtin_decoration.h"
 #include "src/ast/constant_id_decoration.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/group_decoration.h"
-#include "src/ast/location_decoration.h"
-#include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/storage_class.h"
-#include "src/ast/struct.h"
-#include "src/ast/type_constructor_expression.h"
-#include "src/ast/variable.h"
-#include "src/ast/variable_decoration.h"
-#include "src/program.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/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_ident_expression_test.cc b/src/writer/spirv/builder_ident_expression_test.cc
index 4938f76..bacfd58 100644
--- a/src/writer/spirv/builder_ident_expression_test.cc
+++ b/src/writer/spirv/builder_ident_expression_test.cc
@@ -12,20 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.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/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_if_test.cc b/src/writer/spirv/builder_if_test.cc
index dec8097..6918e86 100644
--- a/src/writer/spirv/builder_if_test.cc
+++ b/src/writer/spirv/builder_if_test.cc
@@ -12,23 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gmock/gmock.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/break_statement.h"
-#include "src/ast/continue_statement.h"
-#include "src/ast/else_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/ast/loop_statement.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/type/bool_type.h"
-#include "src/type/i32_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_intrinsic_test.cc b/src/writer/spirv/builder_intrinsic_test.cc
index c52c3e9..e99fe17 100644
--- a/src/writer/spirv/builder_intrinsic_test.cc
+++ b/src/writer/spirv/builder_intrinsic_test.cc
@@ -12,39 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/intrinsic_texture_helper_test.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_member.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/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_intrinsic_texture_test.cc b/src/writer/spirv/builder_intrinsic_texture_test.cc
index f569ea3..5c7f25d 100644
--- a/src/writer/spirv/builder_intrinsic_texture_test.cc
+++ b/src/writer/spirv/builder_intrinsic_texture_test.cc
@@ -12,17 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
 #include "gmock/gmock.h"
 #include "src/ast/call_statement.h"
 #include "src/ast/intrinsic_texture_helper_test.h"
 #include "src/ast/stage_decoration.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/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_literal_test.cc b/src/writer/spirv/builder_literal_test.cc
index 8dc2c1d..dfe2047 100644
--- a/src/writer/spirv/builder_literal_test.cc
+++ b/src/writer/spirv/builder_literal_test.cc
@@ -12,18 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "spirv/unified1/spirv.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/literal.h"
-#include "src/ast/sint_literal.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 662b449..3d96f2b 100644
--- a/src/writer/spirv/builder_loop_test.cc
+++ b/src/writer/spirv/builder_loop_test.cc
@@ -12,18 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/break_statement.h"
-#include "src/ast/continue_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/loop_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/type/i32_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_return_test.cc b/src/writer/spirv/builder_return_test.cc
index e4fd93d..17265b8 100644
--- a/src/writer/spirv/builder_return_test.cc
+++ b/src/writer/spirv/builder_return_test.cc
@@ -12,17 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/type_constructor_expression.h"
-#include "src/type/f32_type.h"
-#include "src/type/vector_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_switch_test.cc b/src/writer/spirv/builder_switch_test.cc
index 67afa1b..ba103ea 100644
--- a/src/writer/spirv/builder_switch_test.cc
+++ b/src/writer/spirv/builder_switch_test.cc
@@ -12,22 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/break_statement.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/fallthrough_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/switch_statement.h"
-#include "src/type/bool_type.h"
-#include "src/type/i32_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_test.cc b/src/writer/spirv/builder_test.cc
index 3498566..20f23b4 100644
--- a/src/writer/spirv/builder_test.cc
+++ b/src/writer/spirv/builder_test.cc
@@ -12,14 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/writer/spirv/builder.h"
-
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "spirv/unified1/spirv.h"
-#include "spirv/unified1/spirv.hpp11"
-#include "src/program.h"
 #include "src/writer/spirv/spv_dump.h"
 #include "src/writer/spirv/test_helper.h"
 
diff --git a/src/writer/spirv/builder_type_test.cc b/src/writer/spirv/builder_type_test.cc
index 06f534e..51dc2eb 100644
--- a/src/writer/spirv/builder_type_test.cc
+++ b/src/writer/spirv/builder_type_test.cc
@@ -12,34 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/stride_decoration.h"
-#include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_member.h"
-#include "src/ast/struct_member_offset_decoration.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/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_unary_op_expression_test.cc b/src/writer/spirv/builder_unary_op_expression_test.cc
index 8a6366a..18f9306 100644
--- a/src/writer/spirv/builder_unary_op_expression_test.cc
+++ b/src/writer/spirv/builder_unary_op_expression_test.cc
@@ -12,20 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/unary_op_expression.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/writer/spirv/builder.h"
 #include "src/writer/spirv/spv_dump.h"
 #include "src/writer/spirv/test_helper.h"
 
diff --git a/src/writer/spirv/function.h b/src/writer/spirv/function.h
index 8421452..926f33f 100644
--- a/src/writer/spirv/function.h
+++ b/src/writer/spirv/function.h
@@ -16,11 +16,8 @@
 #define SRC_WRITER_SPIRV_FUNCTION_H_
 
 #include <functional>
-#include <vector>
 
-#include "spirv/unified1/spirv.hpp11"
 #include "src/writer/spirv/instruction.h"
-#include "src/writer/spirv/operand.h"
 
 namespace tint {
 namespace writer {
diff --git a/src/writer/spirv/generator.cc b/src/writer/spirv/generator.cc
index 4163e57..55ef8c3 100644
--- a/src/writer/spirv/generator.cc
+++ b/src/writer/spirv/generator.cc
@@ -14,8 +14,6 @@
 
 #include "src/writer/spirv/generator.h"
 
-#include <utility>
-
 namespace tint {
 namespace writer {
 namespace spirv {
diff --git a/src/writer/spirv/generator.h b/src/writer/spirv/generator.h
index c85fe4f..284cf54 100644
--- a/src/writer/spirv/generator.h
+++ b/src/writer/spirv/generator.h
@@ -19,9 +19,7 @@
 #include <string>
 #include <vector>
 
-#include "src/program.h"
 #include "src/writer/spirv/binary_writer.h"
-#include "src/writer/spirv/builder.h"
 #include "src/writer/writer.h"
 
 namespace tint {
diff --git a/src/writer/spirv/instruction_test.cc b/src/writer/spirv/instruction_test.cc
index b512470..d9d9946 100644
--- a/src/writer/spirv/instruction_test.cc
+++ b/src/writer/spirv/instruction_test.cc
@@ -15,7 +15,6 @@
 #include "src/writer/spirv/instruction.h"
 
 #include "gtest/gtest.h"
-#include "src/writer/spirv/operand.h"
 
 namespace tint {
 namespace writer {
diff --git a/src/writer/spirv/operand.cc b/src/writer/spirv/operand.cc
index 6aa7bea..36f4c23 100644
--- a/src/writer/spirv/operand.cc
+++ b/src/writer/spirv/operand.cc
@@ -14,8 +14,6 @@
 
 #include "src/writer/spirv/operand.h"
 
-#include <cmath>
-
 namespace tint {
 namespace writer {
 namespace spirv {
diff --git a/src/writer/spirv/spv_dump.h b/src/writer/spirv/spv_dump.h
index 3513290..1187d1a 100644
--- a/src/writer/spirv/spv_dump.h
+++ b/src/writer/spirv/spv_dump.h
@@ -19,7 +19,6 @@
 #include <vector>
 
 #include "src/writer/spirv/builder.h"
-#include "src/writer/spirv/instruction.h"
 
 namespace tint {
 namespace writer {
diff --git a/src/writer/spirv/test_helper.h b/src/writer/spirv/test_helper.h
index 0151016..0fe99e7 100644
--- a/src/writer/spirv/test_helper.h
+++ b/src/writer/spirv/test_helper.h
@@ -21,12 +21,8 @@
 
 #include "gtest/gtest.h"
 #include "spirv-tools/libspirv.hpp"
-#include "src/ast/module.h"
-#include "src/diagnostic/formatter.h"
-#include "src/program_builder.h"
 #include "src/transform/spirv.h"
 #include "src/writer/spirv/binary_writer.h"
-#include "src/writer/spirv/builder.h"
 
 namespace tint {
 namespace writer {
diff --git a/src/writer/text.cc b/src/writer/text.cc
index 28fcd9d..3853e27 100644
--- a/src/writer/text.cc
+++ b/src/writer/text.cc
@@ -14,8 +14,6 @@
 
 #include "src/writer/text.h"
 
-#include <utility>
-
 namespace tint {
 namespace writer {
 
diff --git a/src/writer/text_generator.cc b/src/writer/text_generator.cc
index bfd13fc..2a26d13 100644
--- a/src/writer/text_generator.cc
+++ b/src/writer/text_generator.cc
@@ -14,10 +14,6 @@
 
 #include "src/writer/text_generator.h"
 
-#include <assert.h>
-
-#include <utility>
-
 namespace tint {
 namespace writer {
 
diff --git a/src/writer/wgsl/generator.cc b/src/writer/wgsl/generator.cc
index 90ef18e..c063bc2 100644
--- a/src/writer/wgsl/generator.cc
+++ b/src/writer/wgsl/generator.cc
@@ -14,8 +14,6 @@
 
 #include "src/writer/wgsl/generator.h"
 
-#include <utility>
-
 namespace tint {
 namespace writer {
 namespace wgsl {
diff --git a/src/writer/wgsl/generator.h b/src/writer/wgsl/generator.h
index 1c83faf..af2b03a 100644
--- a/src/writer/wgsl/generator.h
+++ b/src/writer/wgsl/generator.h
@@ -18,7 +18,6 @@
 #include <memory>
 #include <string>
 
-#include "src/program.h"
 #include "src/writer/text.h"
 #include "src/writer/wgsl/generator_impl.h"
 
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index bde480b..dbe65f3 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -15,51 +15,19 @@
 #include "src/writer/wgsl/generator_impl.h"
 
 #include <algorithm>
-#include <cassert>
-#include <limits>
 
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/binding_decoration.h"
-#include "src/ast/bitcast_expression.h"
-#include "src/ast/block_statement.h"
 #include "src/ast/bool_literal.h"
-#include "src/ast/break_statement.h"
-#include "src/ast/builtin_decoration.h"
-#include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/case_statement.h"
 #include "src/ast/constant_id_decoration.h"
-#include "src/ast/constructor_expression.h"
-#include "src/ast/continue_statement.h"
-#include "src/ast/else_statement.h"
 #include "src/ast/float_literal.h"
-#include "src/ast/group_decoration.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/ast/location_decoration.h"
-#include "src/ast/loop_statement.h"
-#include "src/ast/member_accessor_expression.h"
 #include "src/ast/module.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/stage_decoration.h"
-#include "src/ast/statement.h"
 #include "src/ast/stride_decoration.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_member.h"
 #include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/switch_statement.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/debug.h"
-#include "src/program.h"
 #include "src/semantic/function.h"
 #include "src/semantic/variable.h"
 #include "src/type/access_control_type.h"
@@ -73,9 +41,6 @@
 #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"
diff --git a/src/writer/wgsl/generator_impl.h b/src/writer/wgsl/generator_impl.h
index 25a84fb..a584f0f 100644
--- a/src/writer/wgsl/generator_impl.h
+++ b/src/writer/wgsl/generator_impl.h
@@ -15,7 +15,6 @@
 #ifndef SRC_WRITER_WGSL_GENERATOR_IMPL_H_
 #define SRC_WRITER_WGSL_GENERATOR_IMPL_H_
 
-#include <sstream>
 #include <string>
 
 #include "src/ast/array_accessor_expression.h"
@@ -23,13 +22,9 @@
 #include "src/ast/binary_expression.h"
 #include "src/ast/bitcast_expression.h"
 #include "src/ast/break_statement.h"
-#include "src/ast/call_expression.h"
-#include "src/ast/case_statement.h"
-#include "src/ast/constructor_expression.h"
 #include "src/ast/continue_statement.h"
 #include "src/ast/discard_statement.h"
 #include "src/ast/fallthrough_statement.h"
-#include "src/ast/identifier_expression.h"
 #include "src/ast/if_statement.h"
 #include "src/ast/loop_statement.h"
 #include "src/ast/member_accessor_expression.h"
@@ -38,12 +33,9 @@
 #include "src/ast/switch_statement.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/unary_op_expression.h"
-#include "src/ast/variable.h"
-#include "src/diagnostic/diagnostic.h"
 #include "src/program.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 {
diff --git a/src/writer/wgsl/generator_impl_alias_type_test.cc b/src/writer/wgsl/generator_impl_alias_type_test.cc
index 61c23ea..01fb288 100644
--- a/src/writer/wgsl/generator_impl_alias_type_test.cc
+++ b/src/writer/wgsl/generator_impl_alias_type_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/struct.h"
-#include "src/ast/struct_member.h"
-#include "src/ast/struct_member_decoration.h"
-#include "src/type/struct_type.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_array_accessor_test.cc b/src/writer/wgsl/generator_impl_array_accessor_test.cc
index 1aab325..e755d42 100644
--- a/src/writer/wgsl/generator_impl_array_accessor_test.cc
+++ b/src/writer/wgsl/generator_impl_array_accessor_test.cc
@@ -12,15 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/array_accessor_expression.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/type/i32_type.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_assign_test.cc b/src/writer/wgsl/generator_impl_assign_test.cc
index 524324e..7113b03 100644
--- a/src/writer/wgsl/generator_impl_assign_test.cc
+++ b/src/writer/wgsl/generator_impl_assign_test.cc
@@ -12,13 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "gtest/gtest.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_binary_test.cc b/src/writer/wgsl/generator_impl_binary_test.cc
index e955f30..02f3129 100644
--- a/src/writer/wgsl/generator_impl_binary_test.cc
+++ b/src/writer/wgsl/generator_impl_binary_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/binary_expression.h"
-#include "src/ast/identifier_expression.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_bitcast_test.cc b/src/writer/wgsl/generator_impl_bitcast_test.cc
index 8a0341c..e2e2d2c 100644
--- a/src/writer/wgsl/generator_impl_bitcast_test.cc
+++ b/src/writer/wgsl/generator_impl_bitcast_test.cc
@@ -12,13 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/bitcast_expression.h"
-#include "src/ast/identifier_expression.h"
-#include "src/type/f32_type.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_block_test.cc b/src/writer/wgsl/generator_impl_block_test.cc
index 027136c..a67fcd0 100644
--- a/src/writer/wgsl/generator_impl_block_test.cc
+++ b/src/writer/wgsl/generator_impl_block_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/block_statement.h"
-#include "src/ast/discard_statement.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_break_test.cc b/src/writer/wgsl/generator_impl_break_test.cc
index 375bfef..cd75417 100644
--- a/src/writer/wgsl/generator_impl_break_test.cc
+++ b/src/writer/wgsl/generator_impl_break_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "gtest/gtest.h"
-#include "src/ast/break_statement.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_call_test.cc b/src/writer/wgsl/generator_impl_call_test.cc
index 1bf5db1..5c50689 100644
--- a/src/writer/wgsl/generator_impl_call_test.cc
+++ b/src/writer/wgsl/generator_impl_call_test.cc
@@ -12,13 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/call_expression.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_case_test.cc b/src/writer/wgsl/generator_impl_case_test.cc
index e54a758..33d2208 100644
--- a/src/writer/wgsl/generator_impl_case_test.cc
+++ b/src/writer/wgsl/generator_impl_case_test.cc
@@ -12,15 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/break_statement.h"
-#include "src/ast/case_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/type/i32_type.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_cast_test.cc b/src/writer/wgsl/generator_impl_cast_test.cc
index b40e015..cd62e59 100644
--- a/src/writer/wgsl/generator_impl_cast_test.cc
+++ b/src/writer/wgsl/generator_impl_cast_test.cc
@@ -12,13 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/identifier_expression.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"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_constructor_test.cc b/src/writer/wgsl/generator_impl_constructor_test.cc
index b675712..56423c2 100644
--- a/src/writer/wgsl/generator_impl_constructor_test.cc
+++ b/src/writer/wgsl/generator_impl_constructor_test.cc
@@ -12,20 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/bool_literal.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/scalar_constructor_expression.h"
-#include "src/ast/sint_literal.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"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_continue_test.cc b/src/writer/wgsl/generator_impl_continue_test.cc
index 13d82a4..b132faa 100644
--- a/src/writer/wgsl/generator_impl_continue_test.cc
+++ b/src/writer/wgsl/generator_impl_continue_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "gtest/gtest.h"
-#include "src/ast/continue_statement.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_discard_test.cc b/src/writer/wgsl/generator_impl_discard_test.cc
index 5187358..2703061 100644
--- a/src/writer/wgsl/generator_impl_discard_test.cc
+++ b/src/writer/wgsl/generator_impl_discard_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/discard_statement.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_entry_point_test.cc b/src/writer/wgsl/generator_impl_entry_point_test.cc
index 7f98d0e..5415e62 100644
--- a/src/writer/wgsl/generator_impl_entry_point_test.cc
+++ b/src/writer/wgsl/generator_impl_entry_point_test.cc
@@ -12,14 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/assignment_statement.h"
 #include "src/ast/call_statement.h"
 #include "src/ast/stage_decoration.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"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_fallthrough_test.cc b/src/writer/wgsl/generator_impl_fallthrough_test.cc
index 093cbb4..df2f464 100644
--- a/src/writer/wgsl/generator_impl_fallthrough_test.cc
+++ b/src/writer/wgsl/generator_impl_fallthrough_test.cc
@@ -12,9 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/fallthrough_statement.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_function_test.cc b/src/writer/wgsl/generator_impl_function_test.cc
index 52fceb4..7fd4574 100644
--- a/src/writer/wgsl/generator_impl_function_test.cc
+++ b/src/writer/wgsl/generator_impl_function_test.cc
@@ -12,24 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/discard_statement.h"
-#include "src/ast/function.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/ast/pipeline_stage.h"
-#include "src/ast/return_statement.h"
 #include "src/ast/stage_decoration.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
 #include "src/ast/workgroup_decoration.h"
-#include "src/program.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/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_global_decl_test.cc b/src/writer/wgsl/generator_impl_global_decl_test.cc
index 37030f5..9c74d15 100644
--- a/src/writer/wgsl/generator_impl_global_decl_test.cc
+++ b/src/writer/wgsl/generator_impl_global_decl_test.cc
@@ -12,14 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/assignment_statement.h"
-#include "src/ast/call_statement.h"
 #include "src/ast/stage_decoration.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"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_identifier_test.cc b/src/writer/wgsl/generator_impl_identifier_test.cc
index b07c97a..720d6de 100644
--- a/src/writer/wgsl/generator_impl_identifier_test.cc
+++ b/src/writer/wgsl/generator_impl_identifier_test.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_if_test.cc b/src/writer/wgsl/generator_impl_if_test.cc
index 4f5ae04..fbbcdbb 100644
--- a/src/writer/wgsl/generator_impl_if_test.cc
+++ b/src/writer/wgsl/generator_impl_if_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/discard_statement.h"
-#include "src/ast/else_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/if_statement.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_loop_test.cc b/src/writer/wgsl/generator_impl_loop_test.cc
index d525504..768a638 100644
--- a/src/writer/wgsl/generator_impl_loop_test.cc
+++ b/src/writer/wgsl/generator_impl_loop_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/discard_statement.h"
-#include "src/ast/loop_statement.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_member_accessor_test.cc b/src/writer/wgsl/generator_impl_member_accessor_test.cc
index 0a5e19f..16d4a89 100644
--- a/src/writer/wgsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/wgsl/generator_impl_member_accessor_test.cc
@@ -12,12 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/member_accessor_expression.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_return_test.cc b/src/writer/wgsl/generator_impl_return_test.cc
index 69c2151..7ba7d59 100644
--- a/src/writer/wgsl/generator_impl_return_test.cc
+++ b/src/writer/wgsl/generator_impl_return_test.cc
@@ -12,13 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "gtest/gtest.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/return_statement.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_switch_test.cc b/src/writer/wgsl/generator_impl_switch_test.cc
index 79e19a9..9814c58 100644
--- a/src/writer/wgsl/generator_impl_switch_test.cc
+++ b/src/writer/wgsl/generator_impl_switch_test.cc
@@ -12,16 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/break_statement.h"
-#include "src/ast/case_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/switch_statement.h"
-#include "src/type/i32_type.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_test.cc b/src/writer/wgsl/generator_impl_test.cc
index c1d4c77..695ddc4 100644
--- a/src/writer/wgsl/generator_impl_test.cc
+++ b/src/writer/wgsl/generator_impl_test.cc
@@ -12,16 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/writer/wgsl/generator_impl.h"
-
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/function.h"
-#include "src/ast/variable.h"
-#include "src/program.h"
 #include "src/semantic/variable.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 1b6d591..8b1b498 100644
--- a/src/writer/wgsl/generator_impl_type_test.cc
+++ b/src/writer/wgsl/generator_impl_type_test.cc
@@ -12,32 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "gtest/gtest.h"
-#include "src/ast/access_control.h"
-#include "src/ast/stride_decoration.h"
-#include "src/ast/struct.h"
 #include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_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/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"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_unary_op_test.cc b/src/writer/wgsl/generator_impl_unary_op_test.cc
index 8ff75a3..f466282 100644
--- a/src/writer/wgsl/generator_impl_unary_op_test.cc
+++ b/src/writer/wgsl/generator_impl_unary_op_test.cc
@@ -12,13 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "gtest/gtest.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/unary_op_expression.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
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 ce2d3e2..a91c5e1 100644
--- a/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc
@@ -12,17 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-#include <vector>
-
-#include "gtest/gtest.h"
-#include "src/ast/identifier_expression.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/sampled_texture_type.h"
-#include "src/writer/wgsl/generator_impl.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
diff --git a/src/writer/wgsl/generator_impl_variable_test.cc b/src/writer/wgsl/generator_impl_variable_test.cc
index e410195..598f262 100644
--- a/src/writer/wgsl/generator_impl_variable_test.cc
+++ b/src/writer/wgsl/generator_impl_variable_test.cc
@@ -12,18 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
-#include "gtest/gtest.h"
-#include "src/ast/binding_decoration.h"
-#include "src/ast/builtin_decoration.h"
 #include "src/ast/constant_id_decoration.h"
-#include "src/ast/group_decoration.h"
-#include "src/ast/location_decoration.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"
 
 namespace tint {
diff --git a/src/writer/writer.cc b/src/writer/writer.cc
index 7499c3c..f3b765e 100644
--- a/src/writer/writer.cc
+++ b/src/writer/writer.cc
@@ -14,8 +14,6 @@
 
 #include "src/writer/writer.h"
 
-#include <utility>
-
 namespace tint {
 namespace writer {
 
diff --git a/src/writer/writer.h b/src/writer/writer.h
index 1f6a18e..1da5715 100644
--- a/src/writer/writer.h
+++ b/src/writer/writer.h
@@ -17,7 +17,6 @@
 
 #include <string>
 
-#include "src/ast/pipeline_stage.h"
 #include "src/program.h"
 
 namespace tint {