diff --git a/src/ast/as_expression.h b/src/ast/as_expression.h
index e2d1cc1..16b4f91 100644
--- a/src/ast/as_expression.h
+++ b/src/ast/as_expression.h
@@ -17,7 +17,6 @@
 
 #include <memory>
 #include <utility>
-#include <vector>
 
 #include "src/ast/expression.h"
 #include "src/ast/literal.h"
diff --git a/src/ast/call_expression.cc b/src/ast/call_expression.cc
index 6dad233..5cc9e73 100644
--- a/src/ast/call_expression.cc
+++ b/src/ast/call_expression.cc
@@ -20,12 +20,12 @@
 CallExpression::CallExpression() : Expression() {}
 
 CallExpression::CallExpression(std::unique_ptr<Expression> func,
-                               std::vector<std::unique_ptr<Expression>> params)
+                               ExpressionList params)
     : Expression(), func_(std::move(func)), params_(std::move(params)) {}
 
 CallExpression::CallExpression(const Source& source,
                                std::unique_ptr<Expression> func,
-                               std::vector<std::unique_ptr<Expression>> params)
+                               ExpressionList params)
     : Expression(source), func_(std::move(func)), params_(std::move(params)) {}
 
 CallExpression::~CallExpression() = default;
diff --git a/src/ast/call_expression.h b/src/ast/call_expression.h
index 56df9b9..597cf43 100644
--- a/src/ast/call_expression.h
+++ b/src/ast/call_expression.h
@@ -17,7 +17,6 @@
 
 #include <memory>
 #include <utility>
-#include <vector>
 
 #include "src/ast/expression.h"
 #include "src/ast/literal.h"
@@ -33,15 +32,14 @@
   /// Constructor
   /// @param func the function
   /// @param params the parameters
-  CallExpression(std::unique_ptr<Expression> func,
-                 std::vector<std::unique_ptr<Expression>> params);
+  CallExpression(std::unique_ptr<Expression> func, ExpressionList params);
   /// Constructor
   /// @param source the call expression source
   /// @param func the function
   /// @param params the parameters
   CallExpression(const Source& source,
                  std::unique_ptr<Expression> func,
-                 std::vector<std::unique_ptr<Expression>> params);
+                 ExpressionList params);
   /// Move constructor
   CallExpression(CallExpression&&) = default;
   ~CallExpression() override;
@@ -54,13 +52,9 @@
 
   /// Sets the parameters
   /// @param params the parameters
-  void set_params(std::vector<std::unique_ptr<Expression>> params) {
-    params_ = std::move(params);
-  }
+  void set_params(ExpressionList params) { params_ = std::move(params); }
   /// @returns the parameters
-  const std::vector<std::unique_ptr<Expression>>& params() const {
-    return params_;
-  }
+  const ExpressionList& params() const { return params_; }
 
   /// @returns true if this is a call expression
   bool IsCall() const override { return true; }
@@ -77,7 +71,7 @@
   CallExpression(const CallExpression&) = delete;
 
   std::unique_ptr<Expression> func_;
-  std::vector<std::unique_ptr<Expression>> params_;
+  ExpressionList params_;
 };
 
 }  // namespace ast
diff --git a/src/ast/call_expression_test.cc b/src/ast/call_expression_test.cc
index 1425f06..e88627f 100644
--- a/src/ast/call_expression_test.cc
+++ b/src/ast/call_expression_test.cc
@@ -25,7 +25,7 @@
 
 TEST_F(CallExpressionTest, Creation) {
   auto func = std::make_unique<IdentifierExpression>("func");
-  std::vector<std::unique_ptr<Expression>> params;
+  ExpressionList params;
   params.push_back(std::make_unique<IdentifierExpression>("param1"));
   params.push_back(std::make_unique<IdentifierExpression>("param2"));
 
@@ -69,7 +69,7 @@
 
 TEST_F(CallExpressionTest, IsValid_NullParam) {
   auto func = std::make_unique<IdentifierExpression>("func");
-  std::vector<std::unique_ptr<Expression>> params;
+  ExpressionList params;
   params.push_back(std::make_unique<IdentifierExpression>("param1"));
   params.push_back(nullptr);
   params.push_back(std::make_unique<IdentifierExpression>("param2"));
@@ -80,7 +80,7 @@
 
 TEST_F(CallExpressionTest, IsValid_InvalidFunction) {
   auto func = std::make_unique<IdentifierExpression>("");
-  std::vector<std::unique_ptr<Expression>> params;
+  ExpressionList params;
   params.push_back(std::make_unique<IdentifierExpression>("param1"));
 
   CallExpression stmt(std::move(func), std::move(params));
@@ -89,7 +89,7 @@
 
 TEST_F(CallExpressionTest, IsValid_InvalidParam) {
   auto func = std::make_unique<IdentifierExpression>("func");
-  std::vector<std::unique_ptr<Expression>> params;
+  ExpressionList params;
   params.push_back(std::make_unique<IdentifierExpression>(""));
 
   CallExpression stmt(std::move(func), std::move(params));
@@ -111,7 +111,7 @@
 
 TEST_F(CallExpressionTest, ToStr_WithParams) {
   auto func = std::make_unique<IdentifierExpression>("func");
-  std::vector<std::unique_ptr<Expression>> params;
+  ExpressionList params;
   params.push_back(std::make_unique<IdentifierExpression>("param1"));
   params.push_back(std::make_unique<IdentifierExpression>("param2"));
 
diff --git a/src/ast/case_statement.cc b/src/ast/case_statement.cc
index 98e3a47..51412a1 100644
--- a/src/ast/case_statement.cc
+++ b/src/ast/case_statement.cc
@@ -20,12 +20,12 @@
 CaseStatement::CaseStatement() : Statement() {}
 
 CaseStatement::CaseStatement(std::unique_ptr<Literal> condition,
-                             std::vector<std::unique_ptr<Statement>> body)
+                             StatementList body)
     : Statement(), condition_(std::move(condition)), body_(std::move(body)) {}
 
 CaseStatement::CaseStatement(const Source& source,
                              std::unique_ptr<Literal> condition,
-                             std::vector<std::unique_ptr<Statement>> body)
+                             StatementList body)
     : Statement(source),
       condition_(std::move(condition)),
       body_(std::move(body)) {}
diff --git a/src/ast/case_statement.h b/src/ast/case_statement.h
index 8a3ae09..b8db599 100644
--- a/src/ast/case_statement.h
+++ b/src/ast/case_statement.h
@@ -35,15 +35,14 @@
   /// Constructor
   /// @param condition the case condition
   /// @param body the case body
-  CaseStatement(std::unique_ptr<Literal> condition,
-                std::vector<std::unique_ptr<Statement>> body);
+  CaseStatement(std::unique_ptr<Literal> condition, StatementList body);
   /// Constructor
   /// @param source the source information
   /// @param condition the case condition
   /// @param body the case body
   CaseStatement(const Source& source,
                 std::unique_ptr<Literal> condition,
-                std::vector<std::unique_ptr<Statement>> body);
+                StatementList body);
   /// Move constructor
   CaseStatement(CaseStatement&&) = default;
   ~CaseStatement() override;
@@ -60,11 +59,9 @@
 
   /// Sets the case body
   /// @param body the case body
-  void set_body(std::vector<std::unique_ptr<Statement>> body) {
-    body_ = std::move(body);
-  }
+  void set_body(StatementList body) { body_ = std::move(body); }
   /// @returns the case body
-  const std::vector<std::unique_ptr<Statement>>& body() const { return body_; }
+  const StatementList& body() const { return body_; }
 
   /// @returns true if this is a case statement
   bool IsCase() const override { return true; }
@@ -81,9 +78,12 @@
   CaseStatement(const CaseStatement&) = delete;
 
   std::unique_ptr<Literal> condition_;
-  std::vector<std::unique_ptr<Statement>> body_;
+  StatementList body_;
 };
 
+/// A list of unique case statements
+using CaseStatementList = std::vector<std::unique_ptr<CaseStatement>>;
+
 }  // namespace ast
 }  // namespace tint
 
diff --git a/src/ast/case_statement_test.cc b/src/ast/case_statement_test.cc
index 27b94c5..b88b0fe 100644
--- a/src/ast/case_statement_test.cc
+++ b/src/ast/case_statement_test.cc
@@ -29,7 +29,7 @@
 TEST_F(CaseStatementTest, Creation) {
   ast::type::BoolType bool_type;
   auto b = std::make_unique<BoolLiteral>(&bool_type, true);
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<NopStatement>());
 
   auto bool_ptr = b.get();
@@ -44,7 +44,7 @@
 TEST_F(CaseStatementTest, Creation_WithSource) {
   ast::type::BoolType bool_type;
   auto b = std::make_unique<BoolLiteral>(&bool_type, true);
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<NopStatement>());
 
   CaseStatement c(Source{20, 2}, std::move(b), std::move(stmts));
@@ -54,7 +54,7 @@
 }
 
 TEST_F(CaseStatementTest, IsDefault_WithoutCondition) {
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<NopStatement>());
 
   CaseStatement c;
@@ -83,7 +83,7 @@
 TEST_F(CaseStatementTest, IsValid_NullBodyStatement) {
   ast::type::BoolType bool_type;
   auto b = std::make_unique<BoolLiteral>(&bool_type, true);
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<NopStatement>());
   stmts.push_back(nullptr);
 
@@ -94,7 +94,7 @@
 TEST_F(CaseStatementTest, IsValid_InvalidBodyStatement) {
   ast::type::BoolType bool_type;
   auto b = std::make_unique<BoolLiteral>(&bool_type, true);
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<IfStatement>());
 
   CaseStatement c(std::move(b), std::move(stmts));
@@ -104,7 +104,7 @@
 TEST_F(CaseStatementTest, ToStr_WithCondition) {
   ast::type::BoolType bool_type;
   auto b = std::make_unique<BoolLiteral>(&bool_type, true);
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<NopStatement>());
   CaseStatement c(std::move(b), std::move(stmts));
 
@@ -117,7 +117,7 @@
 }
 
 TEST_F(CaseStatementTest, ToStr_WithoutCondition) {
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<NopStatement>());
   CaseStatement c(nullptr, std::move(stmts));
 
diff --git a/src/ast/cast_expression.h b/src/ast/cast_expression.h
index 52966a2..69bfbf5 100644
--- a/src/ast/cast_expression.h
+++ b/src/ast/cast_expression.h
@@ -17,7 +17,6 @@
 
 #include <memory>
 #include <utility>
-#include <vector>
 
 #include "src/ast/expression.h"
 #include "src/ast/literal.h"
diff --git a/src/ast/decorated_variable.h b/src/ast/decorated_variable.h
index 4008a48..5f05416 100644
--- a/src/ast/decorated_variable.h
+++ b/src/ast/decorated_variable.h
@@ -17,7 +17,6 @@
 
 #include <memory>
 #include <utility>
-#include <vector>
 
 #include "src/ast/variable.h"
 #include "src/ast/variable_decoration.h"
@@ -40,13 +39,11 @@
 
   /// Sets a decoration to the variable
   /// @param decos the decorations to set
-  void set_decorations(std::vector<std::unique_ptr<VariableDecoration>> decos) {
+  void set_decorations(VariableDecorationList decos) {
     decorations_ = std::move(decos);
   }
   /// @returns the decorations attached to this variable
-  const std::vector<std::unique_ptr<VariableDecoration>>& decorations() const {
-    return decorations_;
-  }
+  const VariableDecorationList& decorations() const { return decorations_; }
 
   /// @returns true if this is a decorated variable
   bool IsDecorated() const override { return true; }
@@ -61,7 +58,7 @@
  private:
   DecoratedVariable(const DecoratedVariable&) = delete;
 
-  std::vector<std::unique_ptr<VariableDecoration>> decorations_;
+  VariableDecorationList decorations_;
 };
 
 }  // namespace ast
diff --git a/src/ast/decorated_variable_test.cc b/src/ast/decorated_variable_test.cc
index 6d96f8e..11954ab 100644
--- a/src/ast/decorated_variable_test.cc
+++ b/src/ast/decorated_variable_test.cc
@@ -72,7 +72,7 @@
   DecoratedVariable dv(std::move(var));
   dv.set_constructor(std::make_unique<IdentifierExpression>("expr"));
 
-  std::vector<std::unique_ptr<VariableDecoration>> decos;
+  VariableDecorationList decos;
   decos.push_back(std::make_unique<BindingDecoration>(2));
   decos.push_back(std::make_unique<SetDecoration>(1));
 
diff --git a/src/ast/else_statement.cc b/src/ast/else_statement.cc
index 307daec..b879a4f 100644
--- a/src/ast/else_statement.cc
+++ b/src/ast/else_statement.cc
@@ -19,20 +19,19 @@
 
 ElseStatement::ElseStatement() : Statement() {}
 
-ElseStatement::ElseStatement(std::vector<std::unique_ptr<Statement>> body)
+ElseStatement::ElseStatement(StatementList body)
     : Statement(), body_(std::move(body)) {}
 
 ElseStatement::ElseStatement(std::unique_ptr<Expression> condition,
-                             std::vector<std::unique_ptr<Statement>> body)
+                             StatementList body)
     : Statement(), condition_(std::move(condition)), body_(std::move(body)) {}
 
-ElseStatement::ElseStatement(const Source& source,
-                             std::vector<std::unique_ptr<Statement>> body)
+ElseStatement::ElseStatement(const Source& source, StatementList body)
     : Statement(source), body_(std::move(body)) {}
 
 ElseStatement::ElseStatement(const Source& source,
                              std::unique_ptr<Expression> condition,
-                             std::vector<std::unique_ptr<Statement>> body)
+                             StatementList body)
     : Statement(source),
       condition_(std::move(condition)),
       body_(std::move(body)) {}
diff --git a/src/ast/else_statement.h b/src/ast/else_statement.h
index 66511f3..a935bb4 100644
--- a/src/ast/else_statement.h
+++ b/src/ast/else_statement.h
@@ -32,24 +32,22 @@
   ElseStatement();
   /// Constructor
   /// @param body the else body
-  explicit ElseStatement(std::vector<std::unique_ptr<Statement>> body);
+  explicit ElseStatement(StatementList body);
   /// Constructor
   /// @param condition the else condition
   /// @param body the else body
-  ElseStatement(std::unique_ptr<Expression> condition,
-                std::vector<std::unique_ptr<Statement>> body);
+  ElseStatement(std::unique_ptr<Expression> condition, StatementList body);
   /// Constructor
   /// @param source the source information
   /// @param body the else body
-  ElseStatement(const Source& source,
-                std::vector<std::unique_ptr<Statement>> body);
+  ElseStatement(const Source& source, StatementList body);
   /// Constructor
   /// @param source the source information
   /// @param condition the else condition
   /// @param body the else body
   ElseStatement(const Source& source,
                 std::unique_ptr<Expression> condition,
-                std::vector<std::unique_ptr<Statement>> body);
+                StatementList body);
   /// Move constructor
   ElseStatement(ElseStatement&&) = default;
   ~ElseStatement() override;
@@ -66,11 +64,9 @@
 
   /// Sets the else body
   /// @param body the else body
-  void set_body(std::vector<std::unique_ptr<Statement>> body) {
-    body_ = std::move(body);
-  }
+  void set_body(StatementList body) { body_ = std::move(body); }
   /// @returns the else body
-  const std::vector<std::unique_ptr<Statement>>& body() const { return body_; }
+  const StatementList& body() const { return body_; }
 
   /// @returns true if this is a else statement
   bool IsElse() const override { return true; }
@@ -87,9 +83,12 @@
   ElseStatement(const ElseStatement&) = delete;
 
   std::unique_ptr<Expression> condition_;
-  std::vector<std::unique_ptr<Statement>> body_;
+  StatementList body_;
 };
 
+/// A list of unique else statements
+using ElseStatementList = std::vector<std::unique_ptr<ElseStatement>>;
+
 }  // namespace ast
 }  // namespace tint
 
diff --git a/src/ast/else_statement_test.cc b/src/ast/else_statement_test.cc
index 8e5143d..bfa0c77 100644
--- a/src/ast/else_statement_test.cc
+++ b/src/ast/else_statement_test.cc
@@ -31,7 +31,7 @@
   ast::type::BoolType bool_type;
   auto cond = std::make_unique<ScalarConstructorExpression>(
       std::make_unique<BoolLiteral>(&bool_type, true));
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   auto cond_ptr = cond.get();
@@ -74,7 +74,7 @@
 }
 
 TEST_F(ElseStatementTest, IsValid_WithBody) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   ElseStatement e(std::move(body));
@@ -82,7 +82,7 @@
 }
 
 TEST_F(ElseStatementTest, IsValid_WithNullBodyStatement) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
   body.push_back(nullptr);
 
@@ -97,7 +97,7 @@
 }
 
 TEST_F(ElseStatementTest, IsValid_InvalidBodyStatement) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<IfStatement>());
 
   ElseStatement e(std::move(body));
@@ -108,7 +108,7 @@
   ast::type::BoolType bool_type;
   auto cond = std::make_unique<ScalarConstructorExpression>(
       std::make_unique<BoolLiteral>(&bool_type, true));
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   ElseStatement e(std::move(cond), std::move(body));
@@ -126,7 +126,7 @@
 }
 
 TEST_F(ElseStatementTest, ToStr_NoCondition) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   ElseStatement e(std::move(body));
diff --git a/src/ast/entry_point.h b/src/ast/entry_point.h
index 40ca20f..3b4086e 100644
--- a/src/ast/entry_point.h
+++ b/src/ast/entry_point.h
@@ -15,8 +15,10 @@
 #ifndef SRC_AST_ENTRY_POINT_H_
 #define SRC_AST_ENTRY_POINT_H_
 
+#include <memory>
 #include <ostream>
 #include <string>
+#include <vector>
 
 #include "src/ast/node.h"
 #include "src/ast/pipeline_stage.h"
@@ -83,6 +85,9 @@
   std::string fn_name_;
 };
 
+/// A list of unique entry points.
+using EntryPointList = std::vector<std::unique_ptr<EntryPoint>>;
+
 }  // namespace ast
 }  // namespace tint
 
diff --git a/src/ast/expression.h b/src/ast/expression.h
index 63695b2..065755f 100644
--- a/src/ast/expression.h
+++ b/src/ast/expression.h
@@ -15,6 +15,9 @@
 #ifndef SRC_AST_EXPRESSION_H_
 #define SRC_AST_EXPRESSION_H_
 
+#include <memory>
+#include <vector>
+
 #include "src/ast/node.h"
 #include "src/ast/type/type.h"
 
@@ -105,6 +108,9 @@
   type::Type* result_type_ = nullptr;
 };
 
+/// A list of unique expressions
+using ExpressionList = std::vector<std::unique_ptr<Expression>>;
+
 }  // namespace ast
 }  // namespace tint
 
diff --git a/src/ast/fallthrough_statement.h b/src/ast/fallthrough_statement.h
index 34cd092..d9a8675 100644
--- a/src/ast/fallthrough_statement.h
+++ b/src/ast/fallthrough_statement.h
@@ -15,9 +15,6 @@
 #ifndef SRC_AST_FALLTHROUGH_STATEMENT_H_
 #define SRC_AST_FALLTHROUGH_STATEMENT_H_
 
-#include <memory>
-#include <utility>
-
 #include "src/ast/expression.h"
 #include "src/ast/statement.h"
 #include "src/ast/statement_condition.h"
diff --git a/src/ast/function.cc b/src/ast/function.cc
index 4aa7c52..abe5809 100644
--- a/src/ast/function.cc
+++ b/src/ast/function.cc
@@ -20,7 +20,7 @@
 namespace ast {
 
 Function::Function(const std::string& name,
-                   std::vector<std::unique_ptr<Variable>> params,
+                   VariableList params,
                    type::Type* return_type)
     : Node(),
       name_(name),
@@ -29,7 +29,7 @@
 
 Function::Function(const Source& source,
                    const std::string& name,
-                   std::vector<std::unique_ptr<Variable>> params,
+                   VariableList params,
                    type::Type* return_type)
     : Node(source),
       name_(name),
diff --git a/src/ast/function.h b/src/ast/function.h
index 71afe7c..06ea194 100644
--- a/src/ast/function.h
+++ b/src/ast/function.h
@@ -40,7 +40,7 @@
   /// @param params the function parameters
   /// @param return_type the return type
   Function(const std::string& name,
-           std::vector<std::unique_ptr<Variable>> params,
+           VariableList params,
            type::Type* return_type);
   /// Create a function
   /// @param source the variable source
@@ -49,7 +49,7 @@
   /// @param return_type the return type
   Function(const Source& source,
            const std::string& name,
-           std::vector<std::unique_ptr<Variable>> params,
+           VariableList params,
            type::Type* return_type);
   /// Move constructor
   Function(Function&&) = default;
@@ -64,13 +64,9 @@
 
   /// Sets the function parameters
   /// @param params the function parameters
-  void set_params(std::vector<std::unique_ptr<Variable>> params) {
-    params_ = std::move(params);
-  }
+  void set_params(VariableList params) { params_ = std::move(params); }
   /// @returns the function params
-  const std::vector<std::unique_ptr<Variable>>& params() const {
-    return params_;
-  }
+  const VariableList& params() const { return params_; }
 
   /// Sets the return type of the function
   /// @param type the return type
@@ -80,11 +76,9 @@
 
   /// Sets the body of the function
   /// @param body the function body
-  void set_body(std::vector<std::unique_ptr<Statement>> body) {
-    body_ = std::move(body);
-  }
+  void set_body(StatementList body) { body_ = std::move(body); }
   /// @returns the function body
-  const std::vector<std::unique_ptr<Statement>>& body() const { return body_; }
+  const StatementList& body() const { return body_; }
 
   /// @returns true if the name and type are both present
   bool IsValid() const override;
@@ -101,11 +95,14 @@
   Function(const Function&) = delete;
 
   std::string name_;
-  std::vector<std::unique_ptr<Variable>> params_;
+  VariableList params_;
   type::Type* return_type_ = nullptr;
-  std::vector<std::unique_ptr<Statement>> body_;
+  StatementList body_;
 };
 
+/// A list of unique functions
+using FunctionList = std::vector<std::unique_ptr<Function>>;
+
 }  // namespace ast
 }  // namespace tint
 
diff --git a/src/ast/function_test.cc b/src/ast/function_test.cc
index 0e9e2bf..adac67d 100644
--- a/src/ast/function_test.cc
+++ b/src/ast/function_test.cc
@@ -31,7 +31,7 @@
   type::VoidType void_type;
   type::I32Type i32;
 
-  std::vector<std::unique_ptr<Variable>> params;
+  VariableList params;
   params.push_back(
       std::make_unique<Variable>("var", StorageClass::kNone, &i32));
   auto var_ptr = params[0].get();
@@ -47,7 +47,7 @@
   type::VoidType void_type;
   type::I32Type i32;
 
-  std::vector<std::unique_ptr<Variable>> params;
+  VariableList params;
   params.push_back(
       std::make_unique<Variable>("var", StorageClass::kNone, &i32));
 
@@ -61,11 +61,11 @@
   type::VoidType void_type;
   type::I32Type i32;
 
-  std::vector<std::unique_ptr<Variable>> params;
+  VariableList params;
   params.push_back(
       std::make_unique<Variable>("var", StorageClass::kNone, &i32));
 
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   Function f("func", std::move(params), &void_type);
@@ -77,7 +77,7 @@
   type::VoidType void_type;
   type::I32Type i32;
 
-  std::vector<std::unique_ptr<Variable>> params;
+  VariableList params;
   params.push_back(
       std::make_unique<Variable>("var", StorageClass::kNone, &i32));
 
@@ -88,7 +88,7 @@
 TEST_F(FunctionTest, IsValid_MissingReturnType) {
   type::I32Type i32;
 
-  std::vector<std::unique_ptr<Variable>> params;
+  VariableList params;
   params.push_back(
       std::make_unique<Variable>("var", StorageClass::kNone, &i32));
 
@@ -100,7 +100,7 @@
   type::VoidType void_type;
   type::I32Type i32;
 
-  std::vector<std::unique_ptr<Variable>> params;
+  VariableList params;
   params.push_back(
       std::make_unique<Variable>("var", StorageClass::kNone, &i32));
   params.push_back(nullptr);
@@ -112,7 +112,7 @@
 TEST_F(FunctionTest, IsValid_InvalidParam) {
   type::VoidType void_type;
 
-  std::vector<std::unique_ptr<Variable>> params;
+  VariableList params;
   params.push_back(
       std::make_unique<Variable>("var", StorageClass::kNone, nullptr));
 
@@ -124,11 +124,11 @@
   type::VoidType void_type;
   type::I32Type i32;
 
-  std::vector<std::unique_ptr<Variable>> params;
+  VariableList params;
   params.push_back(
       std::make_unique<Variable>("var", StorageClass::kNone, &i32));
 
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
   body.push_back(nullptr);
 
@@ -141,11 +141,11 @@
   type::VoidType void_type;
   type::I32Type i32;
 
-  std::vector<std::unique_ptr<Variable>> params;
+  VariableList params;
   params.push_back(
       std::make_unique<Variable>("var", StorageClass::kNone, &i32));
 
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
   body.push_back(nullptr);
 
@@ -158,7 +158,7 @@
   type::VoidType void_type;
   type::I32Type i32;
 
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   Function f("func", {}, &void_type);
@@ -178,11 +178,11 @@
   type::VoidType void_type;
   type::I32Type i32;
 
-  std::vector<std::unique_ptr<Variable>> params;
+  VariableList params;
   params.push_back(
       std::make_unique<Variable>("var", StorageClass::kNone, &i32));
 
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   Function f("func", std::move(params), &void_type);
@@ -216,7 +216,7 @@
   type::I32Type i32;
   type::F32Type f32;
 
-  std::vector<std::unique_ptr<Variable>> params;
+  VariableList params;
   params.push_back(
       std::make_unique<Variable>("var1", StorageClass::kNone, &i32));
   params.push_back(
diff --git a/src/ast/identifier_expression.h b/src/ast/identifier_expression.h
index 38adc73..3e46129 100644
--- a/src/ast/identifier_expression.h
+++ b/src/ast/identifier_expression.h
@@ -15,7 +15,6 @@
 #ifndef SRC_AST_IDENTIFIER_EXPRESSION_H_
 #define SRC_AST_IDENTIFIER_EXPRESSION_H_
 
-#include <memory>
 #include <string>
 #include <utility>
 #include <vector>
diff --git a/src/ast/if_statement.cc b/src/ast/if_statement.cc
index f000f2e..671cac3 100644
--- a/src/ast/if_statement.cc
+++ b/src/ast/if_statement.cc
@@ -22,12 +22,12 @@
 IfStatement::IfStatement() : Statement() {}
 
 IfStatement::IfStatement(std::unique_ptr<Expression> condition,
-                         std::vector<std::unique_ptr<Statement>> body)
+                         StatementList body)
     : Statement(), condition_(std::move(condition)), body_(std::move(body)) {}
 
 IfStatement::IfStatement(const Source& source,
                          std::unique_ptr<Expression> condition,
-                         std::vector<std::unique_ptr<Statement>> body)
+                         StatementList body)
     : Statement(source),
       condition_(std::move(condition)),
       body_(std::move(body)) {}
diff --git a/src/ast/if_statement.h b/src/ast/if_statement.h
index f628b1c..30f2e66 100644
--- a/src/ast/if_statement.h
+++ b/src/ast/if_statement.h
@@ -17,7 +17,6 @@
 
 #include <memory>
 #include <utility>
-#include <vector>
 
 #include "src/ast/else_statement.h"
 #include "src/ast/expression.h"
@@ -34,15 +33,14 @@
   /// Constructor
   /// @param condition the if condition
   /// @param body the if body
-  IfStatement(std::unique_ptr<Expression> condition,
-              std::vector<std::unique_ptr<Statement>> body);
+  IfStatement(std::unique_ptr<Expression> condition, StatementList body);
   /// Constructor
   /// @param source the source information
   /// @param condition the if condition
   /// @param body the if body
   IfStatement(const Source& source,
               std::unique_ptr<Expression> condition,
-              std::vector<std::unique_ptr<Statement>> body);
+              StatementList body);
   /// Move constructor
   IfStatement(IfStatement&&) = default;
   ~IfStatement() override;
@@ -57,32 +55,23 @@
 
   /// Sets the if body
   /// @param body the if body
-  void set_body(std::vector<std::unique_ptr<Statement>> body) {
-    body_ = std::move(body);
-  }
+  void set_body(StatementList body) { body_ = std::move(body); }
   /// @returns the if body
-  const std::vector<std::unique_ptr<Statement>>& body() const { return body_; }
+  const StatementList& body() const { return body_; }
 
   /// Sets the else statements
   /// @param else_statements the else statements to set
-  void set_else_statements(
-      std::vector<std::unique_ptr<ElseStatement>> else_statements) {
+  void set_else_statements(ElseStatementList else_statements) {
     else_statements_ = std::move(else_statements);
   }
   /// @returns the else statements
-  const std::vector<std::unique_ptr<ElseStatement>>& else_statements() const {
-    return else_statements_;
-  }
+  const ElseStatementList& else_statements() const { return else_statements_; }
 
   /// Sets the premerge statements
   /// @param premerge the premerge statements
-  void set_premerge(std::vector<std::unique_ptr<Statement>> premerge) {
-    premerge_ = std::move(premerge);
-  }
+  void set_premerge(StatementList premerge) { premerge_ = std::move(premerge); }
   /// @returns the premerge statements
-  const std::vector<std::unique_ptr<Statement>>& premerge() const {
-    return premerge_;
-  }
+  const StatementList& premerge() const { return premerge_; }
 
   /// @returns true if this is a if statement
   bool IsIf() const override { return true; }
@@ -99,9 +88,9 @@
   IfStatement(const IfStatement&) = delete;
 
   std::unique_ptr<Expression> condition_;
-  std::vector<std::unique_ptr<Statement>> body_;
-  std::vector<std::unique_ptr<ElseStatement>> else_statements_;
-  std::vector<std::unique_ptr<Statement>> premerge_;
+  StatementList body_;
+  ElseStatementList else_statements_;
+  StatementList premerge_;
 };
 
 }  // namespace ast
diff --git a/src/ast/if_statement_test.cc b/src/ast/if_statement_test.cc
index 6d6abd4..4786ece 100644
--- a/src/ast/if_statement_test.cc
+++ b/src/ast/if_statement_test.cc
@@ -27,7 +27,7 @@
 
 TEST_F(IfStatementTest, Creation) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   auto cond_ptr = cond.get();
@@ -41,7 +41,7 @@
 
 TEST_F(IfStatementTest, Creation_WithSource) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   IfStatement stmt(Source{20, 2}, std::move(cond), std::move(body));
@@ -57,7 +57,7 @@
 
 TEST_F(IfStatementTest, IsValid) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   IfStatement stmt(std::move(cond), std::move(body));
@@ -66,10 +66,10 @@
 
 TEST_F(IfStatementTest, IsValid_WithElseStatements) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  std::vector<std::unique_ptr<ElseStatement>> else_stmts;
+  ElseStatementList else_stmts;
   else_stmts.push_back(std::make_unique<ElseStatement>());
   else_stmts[0]->set_condition(std::make_unique<IdentifierExpression>("Ident"));
   else_stmts.push_back(std::make_unique<ElseStatement>());
@@ -81,13 +81,13 @@
 
 TEST_F(IfStatementTest, IsValid_WithPremerge) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  std::vector<std::unique_ptr<ElseStatement>> else_stmts;
+  ElseStatementList else_stmts;
   else_stmts.push_back(std::make_unique<ElseStatement>());
 
-  std::vector<std::unique_ptr<Statement>> premerge;
+  StatementList premerge;
   premerge.push_back(std::make_unique<NopStatement>());
 
   IfStatement stmt(std::move(cond), std::move(body));
@@ -97,7 +97,7 @@
 }
 
 TEST_F(IfStatementTest, IsValid_MissingCondition) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   IfStatement stmt(nullptr, std::move(body));
@@ -106,7 +106,7 @@
 
 TEST_F(IfStatementTest, IsValid_InvalidCondition) {
   auto cond = std::make_unique<IdentifierExpression>("");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   IfStatement stmt(std::move(cond), std::move(body));
@@ -115,7 +115,7 @@
 
 TEST_F(IfStatementTest, IsValid_NullBodyStatement) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
   body.push_back(nullptr);
 
@@ -125,7 +125,7 @@
 
 TEST_F(IfStatementTest, IsValid_InvalidBodyStatement) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
   body.push_back(std::make_unique<IfStatement>());
 
@@ -135,10 +135,10 @@
 
 TEST_F(IfStatementTest, IsValid_NullElseStatement) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  std::vector<std::unique_ptr<ElseStatement>> else_stmts;
+  ElseStatementList else_stmts;
   else_stmts.push_back(std::make_unique<ElseStatement>());
   else_stmts[0]->set_condition(std::make_unique<IdentifierExpression>("Ident"));
   else_stmts.push_back(std::make_unique<ElseStatement>());
@@ -151,10 +151,10 @@
 
 TEST_F(IfStatementTest, IsValid_InvalidElseStatement) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  std::vector<std::unique_ptr<ElseStatement>> else_stmts;
+  ElseStatementList else_stmts;
   else_stmts.push_back(std::make_unique<ElseStatement>());
   else_stmts[0]->set_condition(std::make_unique<IdentifierExpression>(""));
 
@@ -165,13 +165,13 @@
 
 TEST_F(IfStatementTest, IsValid_NullPremergeStatement) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  std::vector<std::unique_ptr<ElseStatement>> else_stmts;
+  ElseStatementList else_stmts;
   else_stmts.push_back(std::make_unique<ElseStatement>());
 
-  std::vector<std::unique_ptr<Statement>> premerge;
+  StatementList premerge;
   premerge.push_back(std::make_unique<NopStatement>());
   premerge.push_back(nullptr);
 
@@ -183,13 +183,13 @@
 
 TEST_F(IfStatementTest, IsValid_InvalidPremergeStatement) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  std::vector<std::unique_ptr<ElseStatement>> else_stmts;
+  ElseStatementList else_stmts;
   else_stmts.push_back(std::make_unique<ElseStatement>());
 
-  std::vector<std::unique_ptr<Statement>> premerge;
+  StatementList premerge;
   premerge.push_back(std::make_unique<IfStatement>());
 
   IfStatement stmt(std::move(cond), std::move(body));
@@ -200,14 +200,14 @@
 
 TEST_F(IfStatementTest, IsValid_PremergeWithElseIf) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  std::vector<std::unique_ptr<ElseStatement>> else_stmts;
+  ElseStatementList else_stmts;
   else_stmts.push_back(std::make_unique<ElseStatement>());
   else_stmts[0]->set_condition(std::make_unique<IdentifierExpression>("ident"));
 
-  std::vector<std::unique_ptr<Statement>> premerge;
+  StatementList premerge;
   premerge.push_back(std::make_unique<NopStatement>());
 
   IfStatement stmt(std::move(cond), std::move(body));
@@ -218,10 +218,10 @@
 
 TEST_F(IfStatementTest, IsValid_PremergeWithoutElse) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  std::vector<std::unique_ptr<Statement>> premerge;
+  StatementList premerge;
   premerge.push_back(std::make_unique<NopStatement>());
 
   IfStatement stmt(std::move(cond), std::move(body));
@@ -231,10 +231,10 @@
 
 TEST_F(IfStatementTest, IsValid_MultipleElseWiththoutCondition) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  std::vector<std::unique_ptr<ElseStatement>> else_stmts;
+  ElseStatementList else_stmts;
   else_stmts.push_back(std::make_unique<ElseStatement>());
   else_stmts.push_back(std::make_unique<ElseStatement>());
 
@@ -245,10 +245,10 @@
 
 TEST_F(IfStatementTest, IsValid_ElseNotLast) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  std::vector<std::unique_ptr<ElseStatement>> else_stmts;
+  ElseStatementList else_stmts;
   else_stmts.push_back(std::make_unique<ElseStatement>());
   else_stmts.push_back(std::make_unique<ElseStatement>());
   else_stmts[1]->set_condition(std::make_unique<IdentifierExpression>("ident"));
@@ -260,7 +260,7 @@
 
 TEST_F(IfStatementTest, ToStr) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   IfStatement stmt(std::move(cond), std::move(body));
@@ -280,17 +280,17 @@
 
 TEST_F(IfStatementTest, ToStr_WithElseStatements) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  std::vector<std::unique_ptr<Statement>> else_if_body;
+  StatementList else_if_body;
   else_if_body.push_back(std::make_unique<KillStatement>());
 
-  std::vector<std::unique_ptr<Statement>> else_body;
+  StatementList else_body;
   else_body.push_back(std::make_unique<NopStatement>());
   else_body.push_back(std::make_unique<KillStatement>());
 
-  std::vector<std::unique_ptr<ElseStatement>> else_stmts;
+  ElseStatementList else_stmts;
   else_stmts.push_back(std::make_unique<ElseStatement>());
   else_stmts[0]->set_condition(std::make_unique<IdentifierExpression>("ident"));
   else_stmts[0]->set_body(std::move(else_if_body));
@@ -329,13 +329,13 @@
 
 TEST_F(IfStatementTest, ToStr_WithPremerge) {
   auto cond = std::make_unique<IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  std::vector<std::unique_ptr<ElseStatement>> else_stmts;
+  ElseStatementList else_stmts;
   else_stmts.push_back(std::make_unique<ElseStatement>());
 
-  std::vector<std::unique_ptr<Statement>> premerge;
+  StatementList premerge;
   premerge.push_back(std::make_unique<NopStatement>());
 
   IfStatement stmt(std::move(cond), std::move(body));
diff --git a/src/ast/import.h b/src/ast/import.h
index cb67c25..c3d6b82 100644
--- a/src/ast/import.h
+++ b/src/ast/import.h
@@ -15,8 +15,10 @@
 #ifndef SRC_AST_IMPORT_H_
 #define SRC_AST_IMPORT_H_
 
+#include <memory>
 #include <ostream>
 #include <string>
+#include <vector>
 
 #include "src/ast/node.h"
 
@@ -70,6 +72,9 @@
   std::string name_;
 };
 
+/// A list of unique imports
+using ImportList = std::vector<std::unique_ptr<Import>>;
+
 }  // namespace ast
 }  // namespace tint
 
diff --git a/src/ast/loop_statement.cc b/src/ast/loop_statement.cc
index 97efc06..3a853c6 100644
--- a/src/ast/loop_statement.cc
+++ b/src/ast/loop_statement.cc
@@ -19,13 +19,12 @@
 
 LoopStatement::LoopStatement() : Statement() {}
 
-LoopStatement::LoopStatement(std::vector<std::unique_ptr<Statement>> body,
-                             std::vector<std::unique_ptr<Statement>> continuing)
+LoopStatement::LoopStatement(StatementList body, StatementList continuing)
     : Statement(), body_(std::move(body)), continuing_(std::move(continuing)) {}
 
 LoopStatement::LoopStatement(const Source& source,
-                             std::vector<std::unique_ptr<Statement>> body,
-                             std::vector<std::unique_ptr<Statement>> continuing)
+                             StatementList body,
+                             StatementList continuing)
     : Statement(source),
       body_(std::move(body)),
       continuing_(std::move(continuing)) {}
diff --git a/src/ast/loop_statement.h b/src/ast/loop_statement.h
index e7bd755..c70a0cf 100644
--- a/src/ast/loop_statement.h
+++ b/src/ast/loop_statement.h
@@ -15,9 +15,7 @@
 #ifndef SRC_AST_LOOP_STATEMENT_H_
 #define SRC_AST_LOOP_STATEMENT_H_
 
-#include <memory>
 #include <utility>
-#include <vector>
 
 #include "src/ast/statement.h"
 
@@ -32,36 +30,31 @@
   /// Constructor
   /// @param body the body statements
   /// @param continuing the continuing statements
-  LoopStatement(std::vector<std::unique_ptr<Statement>> body,
-                std::vector<std::unique_ptr<Statement>> continuing);
+  LoopStatement(StatementList body, StatementList continuing);
   /// Constructor
   /// @param source the loop statement source
   /// @param body the body statements
   /// @param continuing the continuing statements
   LoopStatement(const Source& source,
-                std::vector<std::unique_ptr<Statement>> body,
-                std::vector<std::unique_ptr<Statement>> continuing);
+                StatementList body,
+                StatementList continuing);
   /// Move constructor
   LoopStatement(LoopStatement&&) = default;
   ~LoopStatement() override;
 
   /// Sets the body statements
   /// @param body the body statements
-  void set_body(std::vector<std::unique_ptr<Statement>> body) {
-    body_ = std::move(body);
-  }
+  void set_body(StatementList body) { body_ = std::move(body); }
   /// @returns the body statements
-  const std::vector<std::unique_ptr<Statement>>& body() const { return body_; }
+  const StatementList& body() const { return body_; }
 
   /// Sets the continuing statements
   /// @param continuing the continuing statements
-  void set_continuing(std::vector<std::unique_ptr<Statement>> continuing) {
+  void set_continuing(StatementList continuing) {
     continuing_ = std::move(continuing);
   }
   /// @returns the continuing statements
-  const std::vector<std::unique_ptr<Statement>>& continuing() const {
-    return continuing_;
-  }
+  const StatementList& continuing() const { return continuing_; }
   /// @returns true if there are continuing statements in the loop
   bool has_continuing() const { return !continuing_.empty(); }
 
@@ -79,8 +72,8 @@
  private:
   LoopStatement(const LoopStatement&) = delete;
 
-  std::vector<std::unique_ptr<Statement>> body_;
-  std::vector<std::unique_ptr<Statement>> continuing_;
+  StatementList body_;
+  StatementList continuing_;
 };
 
 }  // namespace ast
diff --git a/src/ast/loop_statement_test.cc b/src/ast/loop_statement_test.cc
index 37788d5..dad5c6b 100644
--- a/src/ast/loop_statement_test.cc
+++ b/src/ast/loop_statement_test.cc
@@ -14,6 +14,7 @@
 
 #include "src/ast/loop_statement.h"
 
+#include <memory>
 #include <sstream>
 
 #include "gtest/gtest.h"
@@ -28,11 +29,11 @@
 using LoopStatementTest = testing::Test;
 
 TEST_F(LoopStatementTest, Creation) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<KillStatement>());
   auto b_ptr = body[0].get();
 
-  std::vector<std::unique_ptr<Statement>> continuing;
+  StatementList continuing;
   continuing.push_back(std::make_unique<NopStatement>());
   auto c_ptr = continuing[0].get();
 
@@ -44,10 +45,10 @@
 }
 
 TEST_F(LoopStatementTest, Creation_WithSource) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<KillStatement>());
 
-  std::vector<std::unique_ptr<Statement>> continuing;
+  StatementList continuing;
   continuing.push_back(std::make_unique<NopStatement>());
 
   LoopStatement l(Source{20, 2}, std::move(body), std::move(continuing));
@@ -62,7 +63,7 @@
 }
 
 TEST_F(LoopStatementTest, HasContinuing_WithoutContinuing) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<KillStatement>());
 
   LoopStatement l(std::move(body), {});
@@ -70,10 +71,10 @@
 }
 
 TEST_F(LoopStatementTest, HasContinuing_WithContinuing) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<KillStatement>());
 
-  std::vector<std::unique_ptr<Statement>> continuing;
+  StatementList continuing;
   continuing.push_back(std::make_unique<NopStatement>());
 
   LoopStatement l(std::move(body), std::move(continuing));
@@ -81,10 +82,10 @@
 }
 
 TEST_F(LoopStatementTest, IsValid) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<KillStatement>());
 
-  std::vector<std::unique_ptr<Statement>> continuing;
+  StatementList continuing;
   continuing.push_back(std::make_unique<NopStatement>());
 
   LoopStatement l(std::move(body), std::move(continuing));
@@ -92,7 +93,7 @@
 }
 
 TEST_F(LoopStatementTest, IsValid_WithoutContinuing) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<KillStatement>());
 
   LoopStatement l(std::move(body), {});
@@ -105,11 +106,11 @@
 }
 
 TEST_F(LoopStatementTest, IsValid_NullBodyStatement) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<KillStatement>());
   body.push_back(nullptr);
 
-  std::vector<std::unique_ptr<Statement>> continuing;
+  StatementList continuing;
   continuing.push_back(std::make_unique<NopStatement>());
 
   LoopStatement l(std::move(body), std::move(continuing));
@@ -117,11 +118,11 @@
 }
 
 TEST_F(LoopStatementTest, IsValid_InvalidBodyStatement) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<KillStatement>());
   body.push_back(std::make_unique<IfStatement>());
 
-  std::vector<std::unique_ptr<Statement>> continuing;
+  StatementList continuing;
   continuing.push_back(std::make_unique<NopStatement>());
 
   LoopStatement l(std::move(body), std::move(continuing));
@@ -129,10 +130,10 @@
 }
 
 TEST_F(LoopStatementTest, IsValid_NullContinuingStatement) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<KillStatement>());
 
-  std::vector<std::unique_ptr<Statement>> continuing;
+  StatementList continuing;
   continuing.push_back(std::make_unique<NopStatement>());
   continuing.push_back(nullptr);
 
@@ -141,10 +142,10 @@
 }
 
 TEST_F(LoopStatementTest, IsValid_InvalidContinuingStatement) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<KillStatement>());
 
-  std::vector<std::unique_ptr<Statement>> continuing;
+  StatementList continuing;
   continuing.push_back(std::make_unique<NopStatement>());
   continuing.push_back(std::make_unique<IfStatement>());
 
@@ -153,7 +154,7 @@
 }
 
 TEST_F(LoopStatementTest, ToStr) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<KillStatement>());
 
   LoopStatement l(std::move(body), {});
@@ -166,10 +167,10 @@
 }
 
 TEST_F(LoopStatementTest, ToStr_WithContinuing) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<KillStatement>());
 
-  std::vector<std::unique_ptr<Statement>> continuing;
+  StatementList continuing;
   continuing.push_back(std::make_unique<NopStatement>());
 
   LoopStatement l(std::move(body), std::move(continuing));
diff --git a/src/ast/module.h b/src/ast/module.h
index cfe26e7..8bada47 100644
--- a/src/ast/module.h
+++ b/src/ast/module.h
@@ -43,9 +43,7 @@
     imports_.push_back(std::move(import));
   }
   /// @returns the imports for this module
-  const std::vector<std::unique_ptr<Import>>& imports() const {
-    return imports_;
-  }
+  const ImportList& imports() const { return imports_; }
   /// Find the import of the given name
   /// @param name The import name to search for
   /// @returns the import with the given name if found, nullptr otherwise.
@@ -57,9 +55,7 @@
     global_variables_.push_back(std::move(var));
   }
   /// @returns the global variables for the module
-  const std::vector<std::unique_ptr<Variable>>& global_variables() const {
-    return global_variables_;
-  }
+  const VariableList& global_variables() const { return global_variables_; }
 
   /// Adds an entry point to the module
   /// @param ep the entry point to add
@@ -67,9 +63,7 @@
     entry_points_.push_back(std::move(ep));
   }
   /// @returns the entry points in the module
-  const std::vector<std::unique_ptr<EntryPoint>>& entry_points() const {
-    return entry_points_;
-  }
+  const EntryPointList& entry_points() const { return entry_points_; }
 
   /// Adds a type alias to the module
   /// @param type the alias to add
@@ -85,9 +79,7 @@
     functions_.push_back(std::move(func));
   }
   /// @returns the modules functions
-  const std::vector<std::unique_ptr<Function>>& functions() const {
-    return functions_;
-  }
+  const FunctionList& functions() const { return functions_; }
 
   /// @returns true if all required fields in the AST are present.
   bool IsValid() const;
@@ -98,12 +90,12 @@
  private:
   Module(const Module&) = delete;
 
-  std::vector<std::unique_ptr<Import>> imports_;
-  std::vector<std::unique_ptr<Variable>> global_variables_;
-  std::vector<std::unique_ptr<EntryPoint>> entry_points_;
+  ImportList imports_;
+  VariableList global_variables_;
+  EntryPointList entry_points_;
   // The alias types are owned by the type manager
   std::vector<type::AliasType*> alias_types_;
-  std::vector<std::unique_ptr<Function>> functions_;
+  FunctionList functions_;
 };
 
 }  // namespace ast
diff --git a/src/ast/module_test.cc b/src/ast/module_test.cc
index 2742bd4..f9f5968 100644
--- a/src/ast/module_test.cc
+++ b/src/ast/module_test.cc
@@ -163,8 +163,7 @@
 
 TEST_F(ModuleTest, IsValid_Function) {
   type::F32Type f32;
-  auto func = std::make_unique<Function>(
-      "main", std::vector<std::unique_ptr<Variable>>(), &f32);
+  auto func = std::make_unique<Function>("main", VariableList(), &f32);
 
   Module m;
   m.AddFunction(std::move(func));
diff --git a/src/ast/regardless_statement.cc b/src/ast/regardless_statement.cc
index 052ea3d..3e1c52a 100644
--- a/src/ast/regardless_statement.cc
+++ b/src/ast/regardless_statement.cc
@@ -19,15 +19,13 @@
 
 RegardlessStatement::RegardlessStatement() : Statement() {}
 
-RegardlessStatement::RegardlessStatement(
-    std::unique_ptr<Expression> condition,
-    std::vector<std::unique_ptr<Statement>> body)
+RegardlessStatement::RegardlessStatement(std::unique_ptr<Expression> condition,
+                                         StatementList body)
     : Statement(), condition_(std::move(condition)), body_(std::move(body)) {}
 
-RegardlessStatement::RegardlessStatement(
-    const Source& source,
-    std::unique_ptr<Expression> condition,
-    std::vector<std::unique_ptr<Statement>> body)
+RegardlessStatement::RegardlessStatement(const Source& source,
+                                         std::unique_ptr<Expression> condition,
+                                         StatementList body)
     : Statement(source),
       condition_(std::move(condition)),
       body_(std::move(body)) {}
diff --git a/src/ast/regardless_statement.h b/src/ast/regardless_statement.h
index 06e2959..aad9fc7 100644
--- a/src/ast/regardless_statement.h
+++ b/src/ast/regardless_statement.h
@@ -17,7 +17,6 @@
 
 #include <memory>
 #include <utility>
-#include <vector>
 
 #include "src/ast/expression.h"
 #include "src/ast/statement.h"
@@ -34,14 +33,14 @@
   /// @param condition the condition expression
   /// @param body the body statements
   RegardlessStatement(std::unique_ptr<Expression> condition,
-                      std::vector<std::unique_ptr<Statement>> body);
+                      StatementList body);
   /// Constructor
   /// @param source the regardless statement source
   /// @param condition the condition expression
   /// @param body the body statements
   RegardlessStatement(const Source& source,
                       std::unique_ptr<Expression> condition,
-                      std::vector<std::unique_ptr<Statement>> body);
+                      StatementList body);
   /// Move constructor
   RegardlessStatement(RegardlessStatement&&) = default;
   ~RegardlessStatement() override;
@@ -56,11 +55,9 @@
 
   /// Sets the body statements
   /// @param body the body statements
-  void set_body(std::vector<std::unique_ptr<Statement>> body) {
-    body_ = std::move(body);
-  }
+  void set_body(StatementList body) { body_ = std::move(body); }
   /// @returns the body statements
-  const std::vector<std::unique_ptr<Statement>>& body() const { return body_; }
+  const StatementList& body() const { return body_; }
 
   /// @returns true if this is an regardless statement
   bool IsRegardless() const override { return true; }
@@ -77,7 +74,7 @@
   RegardlessStatement(const RegardlessStatement&) = delete;
 
   std::unique_ptr<Expression> condition_;
-  std::vector<std::unique_ptr<Statement>> body_;
+  StatementList body_;
 };
 
 }  // namespace ast
diff --git a/src/ast/regardless_statement_test.cc b/src/ast/regardless_statement_test.cc
index cf15f1f..955ae07 100644
--- a/src/ast/regardless_statement_test.cc
+++ b/src/ast/regardless_statement_test.cc
@@ -29,7 +29,7 @@
 
 TEST_F(RegardlessStatementTest, Creation) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<KillStatement>());
 
   auto ident_ptr = ident.get();
@@ -43,7 +43,7 @@
 
 TEST_F(RegardlessStatementTest, Creation_WithSource) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<KillStatement>());
 
   RegardlessStatement r(Source{20, 2}, std::move(ident), std::move(stmts));
@@ -59,7 +59,7 @@
 
 TEST_F(RegardlessStatementTest, IsValid) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<KillStatement>());
 
   RegardlessStatement r(std::move(ident), std::move(stmts));
@@ -67,7 +67,7 @@
 }
 
 TEST_F(RegardlessStatementTest, IsValid_NullCondition) {
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<KillStatement>());
 
   RegardlessStatement r;
@@ -77,7 +77,7 @@
 
 TEST_F(RegardlessStatementTest, IsValid_InvalidCondition) {
   auto ident = std::make_unique<IdentifierExpression>("");
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<KillStatement>());
 
   RegardlessStatement r(std::move(ident), std::move(stmts));
@@ -86,7 +86,7 @@
 
 TEST_F(RegardlessStatementTest, IsValid_NullBodyStatement) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<KillStatement>());
   stmts.push_back(nullptr);
 
@@ -98,7 +98,7 @@
 
 TEST_F(RegardlessStatementTest, IsValid_InvalidBodyStatement) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<KillStatement>());
   stmts.push_back(std::make_unique<IfStatement>());
 
@@ -108,7 +108,7 @@
 
 TEST_F(RegardlessStatementTest, ToStr) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<Statement>> stmts;
+  StatementList stmts;
   stmts.push_back(std::make_unique<KillStatement>());
 
   RegardlessStatement r(std::move(ident), std::move(stmts));
diff --git a/src/ast/statement.h b/src/ast/statement.h
index d14ee31..ee9b13b 100644
--- a/src/ast/statement.h
+++ b/src/ast/statement.h
@@ -15,6 +15,9 @@
 #ifndef SRC_AST_STATEMENT_H_
 #define SRC_AST_STATEMENT_H_
 
+#include <memory>
+#include <vector>
+
 #include "src/ast/node.h"
 
 namespace tint {
@@ -116,6 +119,9 @@
   Statement(const Statement&) = delete;
 };
 
+/// A list of unique statements
+using StatementList = std::vector<std::unique_ptr<Statement>>;
+
 }  // namespace ast
 }  // namespace tint
 
diff --git a/src/ast/struct.cc b/src/ast/struct.cc
index e643e2b..73df8f8 100644
--- a/src/ast/struct.cc
+++ b/src/ast/struct.cc
@@ -19,13 +19,12 @@
 
 Struct::Struct() : Node() {}
 
-Struct::Struct(StructDecoration decoration,
-               std::vector<std::unique_ptr<StructMember>> members)
+Struct::Struct(StructDecoration decoration, StructMemberList members)
     : Node(), decoration_(decoration), members_(std::move(members)) {}
 
 Struct::Struct(const Source& source,
                StructDecoration decoration,
-               std::vector<std::unique_ptr<StructMember>> members)
+               StructMemberList members)
     : Node(source), decoration_(decoration), members_(std::move(members)) {}
 
 Struct::~Struct() = default;
diff --git a/src/ast/struct.h b/src/ast/struct.h
index b7b157c..76dcd2e 100644
--- a/src/ast/struct.h
+++ b/src/ast/struct.h
@@ -15,11 +15,9 @@
 #ifndef SRC_AST_STRUCT_H_
 #define SRC_AST_STRUCT_H_
 
-#include <memory>
 #include <ostream>
 #include <string>
 #include <utility>
-#include <vector>
 
 #include "src/ast/node.h"
 #include "src/ast/struct_decoration.h"
@@ -36,15 +34,14 @@
   /// Create a new struct statement
   /// @param decoration The struct decorations
   /// @param members The struct members
-  Struct(StructDecoration decoration,
-         std::vector<std::unique_ptr<StructMember>> members);
+  Struct(StructDecoration decoration, StructMemberList members);
   /// Create a new struct statement
   /// @param source The input source for the import statement
   /// @param decoration The struct decorations
   /// @param members The struct members
   Struct(const Source& source,
          StructDecoration decoration,
-         std::vector<std::unique_ptr<StructMember>> members);
+         StructMemberList members);
   /// Move constructor
   Struct(Struct&&) = default;
 
@@ -58,13 +55,9 @@
 
   /// Sets the struct members
   /// @param members the members to set
-  void set_members(std::vector<std::unique_ptr<StructMember>> members) {
-    members_ = std::move(members);
-  }
+  void set_members(StructMemberList members) { members_ = std::move(members); }
   /// @returns the members
-  const std::vector<std::unique_ptr<StructMember>>& members() const {
-    return members_;
-  }
+  const StructMemberList& members() const { return members_; }
 
   /// @returns true if the node is valid
   bool IsValid() const override;
@@ -78,7 +71,7 @@
   Struct(const Struct&) = delete;
 
   StructDecoration decoration_ = StructDecoration::kNone;
-  std::vector<std::unique_ptr<StructMember>> members_;
+  StructMemberList members_;
 };
 
 }  // namespace ast
diff --git a/src/ast/struct_member.cc b/src/ast/struct_member.cc
index 2a95131..a002c6e 100644
--- a/src/ast/struct_member.cc
+++ b/src/ast/struct_member.cc
@@ -17,17 +17,15 @@
 namespace tint {
 namespace ast {
 
-StructMember::StructMember(
-    const std::string& name,
-    type::Type* type,
-    std::vector<std::unique_ptr<StructMemberDecoration>> decorations)
+StructMember::StructMember(const std::string& name,
+                           type::Type* type,
+                           StructMemberDecorationList decorations)
     : Node(), name_(name), type_(type), decorations_(std::move(decorations)) {}
 
-StructMember::StructMember(
-    const Source& source,
-    const std::string& name,
-    type::Type* type,
-    std::vector<std::unique_ptr<StructMemberDecoration>> decorations)
+StructMember::StructMember(const Source& source,
+                           const std::string& name,
+                           type::Type* type,
+                           StructMemberDecorationList decorations)
     : Node(source),
       name_(name),
       type_(type),
diff --git a/src/ast/struct_member.h b/src/ast/struct_member.h
index 0aceb81..07af25d 100644
--- a/src/ast/struct_member.h
+++ b/src/ast/struct_member.h
@@ -37,20 +37,18 @@
   /// @param name The struct member name
   /// @param type The struct member type
   /// @param decorations The struct member decorations
-  StructMember(
-      const std::string& name,
-      type::Type* type,
-      std::vector<std::unique_ptr<StructMemberDecoration>> decorations);
+  StructMember(const std::string& name,
+               type::Type* type,
+               StructMemberDecorationList decorations);
   /// Create a new struct member statement
   /// @param source The input source for the struct member statement
   /// @param name The struct member name
   /// @param type The struct member type
   /// @param decorations The struct member decorations
-  StructMember(
-      const Source& source,
-      const std::string& name,
-      type::Type* type,
-      std::vector<std::unique_ptr<StructMemberDecoration>> decorations);
+  StructMember(const Source& source,
+               const std::string& name,
+               type::Type* type,
+               StructMemberDecorationList decorations);
   /// Move constructor
   StructMember(StructMember&&) = default;
 
@@ -68,15 +66,11 @@
   type::Type* type() const { return type_; }
   /// Sets the decorations
   /// @param decorations the decorations
-  void set_decorations(
-      std::vector<std::unique_ptr<StructMemberDecoration>> decorations) {
+  void set_decorations(StructMemberDecorationList decorations) {
     decorations_ = std::move(decorations);
   }
   /// @returns the decorations
-  const std::vector<std::unique_ptr<StructMemberDecoration>>& decorations()
-      const {
-    return decorations_;
-  }
+  const StructMemberDecorationList& decorations() const { return decorations_; }
 
   /// @returns true if the node is valid
   bool IsValid() const override;
@@ -91,9 +85,12 @@
 
   std::string name_;
   type::Type* type_ = nullptr;
-  std::vector<std::unique_ptr<StructMemberDecoration>> decorations_;
+  StructMemberDecorationList decorations_;
 };
 
+/// A list of unique struct members
+using StructMemberList = std::vector<std::unique_ptr<StructMember>>;
+
 }  // namespace ast
 }  // namespace tint
 
diff --git a/src/ast/struct_member_decoration.h b/src/ast/struct_member_decoration.h
index 525bb64..e7a49ba 100644
--- a/src/ast/struct_member_decoration.h
+++ b/src/ast/struct_member_decoration.h
@@ -15,7 +15,9 @@
 #ifndef SRC_AST_STRUCT_MEMBER_DECORATION_H_
 #define SRC_AST_STRUCT_MEMBER_DECORATION_H_
 
+#include <memory>
 #include <string>
+#include <vector>
 
 namespace tint {
 namespace ast {
@@ -40,6 +42,10 @@
   StructMemberDecoration();
 };
 
+/// A list of unique struct member decorations
+using StructMemberDecorationList =
+    std::vector<std::unique_ptr<StructMemberDecoration>>;
+
 }  // namespace ast
 }  // namespace tint
 
diff --git a/src/ast/struct_member_test.cc b/src/ast/struct_member_test.cc
index c164959..b6f3ded 100644
--- a/src/ast/struct_member_test.cc
+++ b/src/ast/struct_member_test.cc
@@ -29,7 +29,7 @@
 
 TEST_F(StructMemberTest, Creation) {
   type::I32Type i32;
-  std::vector<std::unique_ptr<StructMemberDecoration>> decorations;
+  StructMemberDecorationList decorations;
   decorations.emplace_back(std::make_unique<StructMemberOffsetDecoration>(4));
 
   StructMember st{"a", &i32, std::move(decorations)};
@@ -72,7 +72,7 @@
 
 TEST_F(StructMemberTest, IsValid_Null_Decoration) {
   type::I32Type i32;
-  std::vector<std::unique_ptr<StructMemberDecoration>> decorations;
+  StructMemberDecorationList decorations;
   decorations.emplace_back(std::make_unique<StructMemberOffsetDecoration>(4));
   decorations.push_back(nullptr);
 
@@ -82,7 +82,7 @@
 
 TEST_F(StructMemberTest, ToStr) {
   type::I32Type i32;
-  std::vector<std::unique_ptr<StructMemberDecoration>> decorations;
+  StructMemberDecorationList decorations;
   decorations.emplace_back(std::make_unique<StructMemberOffsetDecoration>(4));
 
   StructMember st{"a", &i32, std::move(decorations)};
diff --git a/src/ast/struct_test.cc b/src/ast/struct_test.cc
index b214525..15dbad9 100644
--- a/src/ast/struct_test.cc
+++ b/src/ast/struct_test.cc
@@ -14,6 +14,7 @@
 
 #include "src/ast/struct.h"
 
+#include <memory>
 #include <sstream>
 #include <utility>
 
@@ -30,9 +31,9 @@
 
 TEST_F(StructTest, Creation) {
   type::I32Type i32;
-  std::vector<std::unique_ptr<StructMember>> members;
-  members.push_back(std::make_unique<StructMember>(
-      "a", &i32, std::vector<std::unique_ptr<StructMemberDecoration>>()));
+  StructMemberList members;
+  members.push_back(
+      std::make_unique<StructMember>("a", &i32, StructMemberDecorationList()));
 
   Struct s{StructDecoration::kNone, std::move(members)};
   EXPECT_EQ(s.members().size(), 1);
@@ -44,9 +45,9 @@
 TEST_F(StructTest, CreationWithSource) {
   type::I32Type i32;
   Source source{27, 4};
-  std::vector<std::unique_ptr<StructMember>> members;
-  members.emplace_back(std::make_unique<StructMember>(
-      "a", &i32, std::vector<std::unique_ptr<StructMemberDecoration>>()));
+  StructMemberList members;
+  members.emplace_back(
+      std::make_unique<StructMember>("a", &i32, StructMemberDecorationList()));
 
   Struct s{source, StructDecoration::kNone, std::move(members)};
   EXPECT_EQ(s.members().size(), 1);
@@ -62,9 +63,9 @@
 
 TEST_F(StructTest, IsValid_Null_StructMember) {
   type::I32Type i32;
-  std::vector<std::unique_ptr<StructMember>> members;
-  members.push_back(std::make_unique<StructMember>(
-      "a", &i32, std::vector<std::unique_ptr<StructMemberDecoration>>()));
+  StructMemberList members;
+  members.push_back(
+      std::make_unique<StructMember>("a", &i32, StructMemberDecorationList()));
   members.push_back(nullptr);
 
   Struct s{StructDecoration::kNone, std::move(members)};
@@ -73,9 +74,9 @@
 
 TEST_F(StructTest, IsValid_Invalid_StructMember) {
   type::I32Type i32;
-  std::vector<std::unique_ptr<StructMember>> members;
-  members.push_back(std::make_unique<StructMember>(
-      "", &i32, std::vector<std::unique_ptr<StructMemberDecoration>>()));
+  StructMemberList members;
+  members.push_back(
+      std::make_unique<StructMember>("", &i32, StructMemberDecorationList()));
 
   Struct s{StructDecoration::kNone, std::move(members)};
   EXPECT_FALSE(s.IsValid());
@@ -84,9 +85,9 @@
 TEST_F(StructTest, ToStr) {
   type::I32Type i32;
   Source source{27, 4};
-  std::vector<std::unique_ptr<StructMember>> members;
-  members.emplace_back(std::make_unique<StructMember>(
-      "a", &i32, std::vector<std::unique_ptr<StructMemberDecoration>>()));
+  StructMemberList members;
+  members.emplace_back(
+      std::make_unique<StructMember>("a", &i32, StructMemberDecorationList()));
 
   Struct s{source, StructDecoration::kNone, std::move(members)};
 
diff --git a/src/ast/switch_statement.cc b/src/ast/switch_statement.cc
index 3512187..483f3d9 100644
--- a/src/ast/switch_statement.cc
+++ b/src/ast/switch_statement.cc
@@ -21,15 +21,13 @@
 
 SwitchStatement::SwitchStatement() : Statement() {}
 
-SwitchStatement::SwitchStatement(
-    std::unique_ptr<Expression> condition,
-    std::vector<std::unique_ptr<CaseStatement>> body)
+SwitchStatement::SwitchStatement(std::unique_ptr<Expression> condition,
+                                 CaseStatementList body)
     : Statement(), condition_(std::move(condition)), body_(std::move(body)) {}
 
-SwitchStatement::SwitchStatement(
-    const Source& source,
-    std::unique_ptr<Expression> condition,
-    std::vector<std::unique_ptr<CaseStatement>> body)
+SwitchStatement::SwitchStatement(const Source& source,
+                                 std::unique_ptr<Expression> condition,
+                                 CaseStatementList body)
     : Statement(source),
       condition_(std::move(condition)),
       body_(std::move(body)) {}
diff --git a/src/ast/switch_statement.h b/src/ast/switch_statement.h
index 9d13995..dceaef7 100644
--- a/src/ast/switch_statement.h
+++ b/src/ast/switch_statement.h
@@ -17,8 +17,8 @@
 
 #include <memory>
 #include <utility>
-#include <vector>
 
+#include "src/ast/case_statement.h"
 #include "src/ast/expression.h"
 #include "src/ast/literal.h"
 #include "src/ast/statement.h"
@@ -36,14 +36,14 @@
   /// @param condition the switch condition
   /// @param body the switch body
   SwitchStatement(std::unique_ptr<Expression> condition,
-                  std::vector<std::unique_ptr<CaseStatement>> body);
+                  CaseStatementList body);
   /// Constructor
   /// @param source the source information
   /// @param condition the switch condition
   /// @param body the switch body
   SwitchStatement(const Source& source,
                   std::unique_ptr<Expression> condition,
-                  std::vector<std::unique_ptr<CaseStatement>> body);
+                  CaseStatementList body);
   /// Move constructor
   SwitchStatement(SwitchStatement&&) = default;
   ~SwitchStatement() override;
@@ -60,13 +60,9 @@
 
   /// Sets the switch body
   /// @param body the switch body
-  void set_body(std::vector<std::unique_ptr<CaseStatement>> body) {
-    body_ = std::move(body);
-  }
+  void set_body(CaseStatementList body) { body_ = std::move(body); }
   /// @returns the Switch body
-  const std::vector<std::unique_ptr<CaseStatement>>& body() const {
-    return body_;
-  }
+  const CaseStatementList& body() const { return body_; }
 
   /// @returns true if this is a switch statement
   bool IsSwitch() const override { return true; }
@@ -83,7 +79,7 @@
   SwitchStatement(const SwitchStatement&) = delete;
 
   std::unique_ptr<Expression> condition_;
-  std::vector<std::unique_ptr<CaseStatement>> body_;
+  CaseStatementList body_;
 };
 
 }  // namespace ast
diff --git a/src/ast/switch_statement_test.cc b/src/ast/switch_statement_test.cc
index 4bb71f5..08ea6f3 100644
--- a/src/ast/switch_statement_test.cc
+++ b/src/ast/switch_statement_test.cc
@@ -32,9 +32,9 @@
   ast::type::BoolType bool_type;
   auto lit = std::make_unique<BoolLiteral>(&bool_type, true);
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<CaseStatement>> body;
-  body.push_back(std::make_unique<CaseStatement>(
-      std::move(lit), std::vector<std::unique_ptr<Statement>>()));
+  CaseStatementList body;
+  body.push_back(
+      std::make_unique<CaseStatement>(std::move(lit), StatementList()));
 
   auto ident_ptr = ident.get();
   auto case_ptr = body[0].get();
@@ -48,8 +48,7 @@
 TEST_F(SwitchStatementTest, Creation_WithSource) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
 
-  SwitchStatement stmt(Source{20, 2}, std::move(ident),
-                       std::vector<std::unique_ptr<CaseStatement>>());
+  SwitchStatement stmt(Source{20, 2}, std::move(ident), CaseStatementList());
   auto src = stmt.source();
   EXPECT_EQ(src.line, 20);
   EXPECT_EQ(src.column, 2);
@@ -64,9 +63,9 @@
   ast::type::BoolType bool_type;
   auto lit = std::make_unique<BoolLiteral>(&bool_type, true);
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<CaseStatement>> body;
-  body.push_back(std::make_unique<CaseStatement>(
-      std::move(lit), std::vector<std::unique_ptr<Statement>>()));
+  CaseStatementList body;
+  body.push_back(
+      std::make_unique<CaseStatement>(std::move(lit), StatementList()));
 
   SwitchStatement stmt(std::move(ident), std::move(body));
   EXPECT_TRUE(stmt.IsValid());
@@ -75,9 +74,9 @@
 TEST_F(SwitchStatementTest, IsValid_Null_Condition) {
   ast::type::BoolType bool_type;
   auto lit = std::make_unique<BoolLiteral>(&bool_type, true);
-  std::vector<std::unique_ptr<CaseStatement>> body;
-  body.push_back(std::make_unique<CaseStatement>(
-      std::move(lit), std::vector<std::unique_ptr<Statement>>()));
+  CaseStatementList body;
+  body.push_back(
+      std::make_unique<CaseStatement>(std::move(lit), StatementList()));
 
   SwitchStatement stmt;
   stmt.set_body(std::move(body));
@@ -88,9 +87,9 @@
   ast::type::BoolType bool_type;
   auto lit = std::make_unique<BoolLiteral>(&bool_type, true);
   auto ident = std::make_unique<IdentifierExpression>("");
-  std::vector<std::unique_ptr<CaseStatement>> body;
-  body.push_back(std::make_unique<CaseStatement>(
-      std::move(lit), std::vector<std::unique_ptr<Statement>>()));
+  CaseStatementList body;
+  body.push_back(
+      std::make_unique<CaseStatement>(std::move(lit), StatementList()));
 
   SwitchStatement stmt(std::move(ident), std::move(body));
   EXPECT_FALSE(stmt.IsValid());
@@ -100,9 +99,9 @@
   ast::type::BoolType bool_type;
   auto lit = std::make_unique<BoolLiteral>(&bool_type, true);
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<CaseStatement>> body;
-  body.push_back(std::make_unique<CaseStatement>(
-      std::move(lit), std::vector<std::unique_ptr<Statement>>()));
+  CaseStatementList body;
+  body.push_back(
+      std::make_unique<CaseStatement>(std::move(lit), StatementList()));
   body.push_back(nullptr);
 
   SwitchStatement stmt(std::move(ident), std::move(body));
@@ -112,10 +111,10 @@
 TEST_F(SwitchStatementTest, IsValid_Invalid_BodyStatement) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
 
-  std::vector<std::unique_ptr<Statement>> case_body;
+  StatementList case_body;
   case_body.push_back(nullptr);
 
-  std::vector<std::unique_ptr<CaseStatement>> body;
+  CaseStatementList body;
   body.push_back(
       std::make_unique<CaseStatement>(nullptr, std::move(case_body)));
 
@@ -141,9 +140,9 @@
   ast::type::BoolType bool_type;
   auto lit = std::make_unique<BoolLiteral>(&bool_type, true);
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<CaseStatement>> body;
-  body.push_back(std::make_unique<CaseStatement>(
-      std::move(lit), std::vector<std::unique_ptr<Statement>>()));
+  CaseStatementList body;
+  body.push_back(
+      std::make_unique<CaseStatement>(std::move(lit), StatementList()));
 
   SwitchStatement stmt(std::move(ident), std::move(body));
   std::ostringstream out;
diff --git a/src/ast/type_constructor_expression.cc b/src/ast/type_constructor_expression.cc
index 4b33bbc..f555902 100644
--- a/src/ast/type_constructor_expression.cc
+++ b/src/ast/type_constructor_expression.cc
@@ -20,15 +20,13 @@
 TypeConstructorExpression::TypeConstructorExpression()
     : ConstructorExpression() {}
 
-TypeConstructorExpression::TypeConstructorExpression(
-    type::Type* type,
-    std::vector<std::unique_ptr<Expression>> values)
+TypeConstructorExpression::TypeConstructorExpression(type::Type* type,
+                                                     ExpressionList values)
     : ConstructorExpression(), type_(type), values_(std::move(values)) {}
 
-TypeConstructorExpression::TypeConstructorExpression(
-    const Source& source,
-    type::Type* type,
-    std::vector<std::unique_ptr<Expression>> values)
+TypeConstructorExpression::TypeConstructorExpression(const Source& source,
+                                                     type::Type* type,
+                                                     ExpressionList values)
     : ConstructorExpression(source), type_(type), values_(std::move(values)) {}
 
 TypeConstructorExpression::~TypeConstructorExpression() = default;
diff --git a/src/ast/type_constructor_expression.h b/src/ast/type_constructor_expression.h
index fdc3941..a6e6aba 100644
--- a/src/ast/type_constructor_expression.h
+++ b/src/ast/type_constructor_expression.h
@@ -17,7 +17,6 @@
 
 #include <memory>
 #include <utility>
-#include <vector>
 
 #include "src/ast/constructor_expression.h"
 #include "src/ast/type/type.h"
@@ -32,16 +31,14 @@
   /// Constructor
   /// @param type the type
   /// @param values the values
-  explicit TypeConstructorExpression(
-      type::Type* type,
-      std::vector<std::unique_ptr<Expression>> values);
+  explicit TypeConstructorExpression(type::Type* type, ExpressionList values);
   /// Constructor
   /// @param source the constructor source
   /// @param type the type
   /// @param values the constructor values
   TypeConstructorExpression(const Source& source,
                             type::Type* type,
-                            std::vector<std::unique_ptr<Expression>> values);
+                            ExpressionList values);
   /// Move constructor
   TypeConstructorExpression(TypeConstructorExpression&&) = default;
   ~TypeConstructorExpression() override;
@@ -57,13 +54,9 @@
 
   /// Set the values
   /// @param values the values
-  void set_values(std::vector<std::unique_ptr<Expression>> values) {
-    values_ = std::move(values);
-  }
+  void set_values(ExpressionList values) { values_ = std::move(values); }
   /// @returns the values
-  const std::vector<std::unique_ptr<Expression>>& values() const {
-    return values_;
-  }
+  const ExpressionList& values() const { return values_; }
 
   /// @returns true if the node is valid
   bool IsValid() const override;
@@ -77,7 +70,7 @@
   TypeConstructorExpression(const TypeConstructorExpression&) = delete;
 
   type::Type* type_ = nullptr;
-  std::vector<std::unique_ptr<Expression>> values_;
+  ExpressionList values_;
 };
 
 }  // namespace ast
diff --git a/src/ast/type_constructor_expression_test.cc b/src/ast/type_constructor_expression_test.cc
index 4166995..ad4e01a 100644
--- a/src/ast/type_constructor_expression_test.cc
+++ b/src/ast/type_constructor_expression_test.cc
@@ -16,7 +16,6 @@
 
 #include <memory>
 #include <sstream>
-#include <vector>
 
 #include "gtest/gtest.h"
 #include "src/ast/constructor_expression.h"
@@ -32,7 +31,7 @@
 
 TEST_F(TypeConstructorExpressionTest, Creation) {
   type::F32Type f32;
-  std::vector<std::unique_ptr<Expression>> expr;
+  ExpressionList expr;
   expr.push_back(std::make_unique<IdentifierExpression>("expr"));
   auto expr_ptr = expr[0].get();
 
@@ -44,7 +43,7 @@
 
 TEST_F(TypeConstructorExpressionTest, Creation_WithSource) {
   type::F32Type f32;
-  std::vector<std::unique_ptr<Expression>> expr;
+  ExpressionList expr;
   expr.push_back(std::make_unique<IdentifierExpression>("expr"));
 
   TypeConstructorExpression t(Source{20, 2}, &f32, std::move(expr));
@@ -60,7 +59,7 @@
 
 TEST_F(TypeConstructorExpressionTest, IsValid) {
   type::F32Type f32;
-  std::vector<std::unique_ptr<Expression>> expr;
+  ExpressionList expr;
   expr.push_back(std::make_unique<IdentifierExpression>("expr"));
 
   TypeConstructorExpression t(&f32, std::move(expr));
@@ -68,7 +67,7 @@
 }
 
 TEST_F(TypeConstructorExpressionTest, IsValid_NullType) {
-  std::vector<std::unique_ptr<Expression>> expr;
+  ExpressionList expr;
   expr.push_back(std::make_unique<IdentifierExpression>("expr"));
 
   TypeConstructorExpression t;
@@ -78,7 +77,7 @@
 
 TEST_F(TypeConstructorExpressionTest, IsValid_NullValue) {
   type::F32Type f32;
-  std::vector<std::unique_ptr<Expression>> expr;
+  ExpressionList expr;
   expr.push_back(std::make_unique<IdentifierExpression>("expr"));
   expr.push_back(nullptr);
 
@@ -88,7 +87,7 @@
 
 TEST_F(TypeConstructorExpressionTest, IsValid_InvalidValue) {
   type::F32Type f32;
-  std::vector<std::unique_ptr<Expression>> expr;
+  ExpressionList expr;
   expr.push_back(std::make_unique<IdentifierExpression>(""));
 
   TypeConstructorExpression t(&f32, std::move(expr));
@@ -97,7 +96,7 @@
 
 TEST_F(TypeConstructorExpressionTest, IsValid_EmptyValue) {
   type::F32Type f32;
-  std::vector<std::unique_ptr<Expression>> expr;
+  ExpressionList expr;
 
   TypeConstructorExpression t(&f32, std::move(expr));
   EXPECT_FALSE(t.IsValid());
@@ -106,7 +105,7 @@
 TEST_F(TypeConstructorExpressionTest, ToStr) {
   type::F32Type f32;
   type::VectorType vec(&f32, 3);
-  std::vector<std::unique_ptr<Expression>> expr;
+  ExpressionList expr;
   expr.push_back(std::make_unique<IdentifierExpression>("expr_1"));
   expr.push_back(std::make_unique<IdentifierExpression>("expr_2"));
   expr.push_back(std::make_unique<IdentifierExpression>("expr_3"));
diff --git a/src/ast/unary_method_expression.cc b/src/ast/unary_method_expression.cc
index 5898fee..9c8a77c 100644
--- a/src/ast/unary_method_expression.cc
+++ b/src/ast/unary_method_expression.cc
@@ -19,15 +19,13 @@
 
 UnaryMethodExpression::UnaryMethodExpression() : Expression() {}
 
-UnaryMethodExpression::UnaryMethodExpression(
-    UnaryMethod op,
-    std::vector<std::unique_ptr<Expression>> params)
+UnaryMethodExpression::UnaryMethodExpression(UnaryMethod op,
+                                             ExpressionList params)
     : Expression(), op_(op), params_(std::move(params)) {}
 
-UnaryMethodExpression::UnaryMethodExpression(
-    const Source& source,
-    UnaryMethod op,
-    std::vector<std::unique_ptr<Expression>> params)
+UnaryMethodExpression::UnaryMethodExpression(const Source& source,
+                                             UnaryMethod op,
+                                             ExpressionList params)
     : Expression(source), op_(op), params_(std::move(params)) {}
 
 UnaryMethodExpression::~UnaryMethodExpression() = default;
diff --git a/src/ast/unary_method_expression.h b/src/ast/unary_method_expression.h
index 8e67471..58c86c5 100644
--- a/src/ast/unary_method_expression.h
+++ b/src/ast/unary_method_expression.h
@@ -15,9 +15,7 @@
 #ifndef SRC_AST_UNARY_METHOD_EXPRESSION_H_
 #define SRC_AST_UNARY_METHOD_EXPRESSION_H_
 
-#include <memory>
 #include <utility>
-#include <vector>
 
 #include "src/ast/expression.h"
 #include "src/ast/literal.h"
@@ -34,15 +32,14 @@
   /// Constructor
   /// @param op the op
   /// @param params the params
-  UnaryMethodExpression(UnaryMethod op,
-                        std::vector<std::unique_ptr<Expression>> params);
+  UnaryMethodExpression(UnaryMethod op, ExpressionList params);
   /// Constructor
   /// @param source the unary method source
   /// @param op the op
   /// @param params the params
   UnaryMethodExpression(const Source& source,
                         UnaryMethod op,
-                        std::vector<std::unique_ptr<Expression>> params);
+                        ExpressionList params);
   /// Move constructor
   UnaryMethodExpression(UnaryMethodExpression&&) = default;
   ~UnaryMethodExpression() override;
@@ -55,13 +52,9 @@
 
   /// Sets the params
   /// @param params the parameters
-  void set_params(std::vector<std::unique_ptr<Expression>> params) {
-    params_ = std::move(params);
-  }
+  void set_params(ExpressionList params) { params_ = std::move(params); }
   /// @returns the params
-  const std::vector<std::unique_ptr<Expression>>& params() const {
-    return params_;
-  }
+  const ExpressionList& params() const { return params_; }
 
   /// @returns true if this is an as expression
   bool IsUnaryMethod() const override { return true; }
@@ -78,7 +71,7 @@
   UnaryMethodExpression(const UnaryMethodExpression&) = delete;
 
   UnaryMethod op_ = UnaryMethod::kAny;
-  std::vector<std::unique_ptr<Expression>> params_;
+  ExpressionList params_;
 };
 
 }  // namespace ast
diff --git a/src/ast/unary_method_expression_test.cc b/src/ast/unary_method_expression_test.cc
index 2d51e63..92f265e 100644
--- a/src/ast/unary_method_expression_test.cc
+++ b/src/ast/unary_method_expression_test.cc
@@ -14,6 +14,7 @@
 
 #include "src/ast/unary_method_expression.h"
 
+#include <memory>
 #include <sstream>
 
 #include "gtest/gtest.h"
@@ -26,7 +27,7 @@
 using UnaryMethodExpressionTest = testing::Test;
 
 TEST_F(UnaryMethodExpressionTest, Creation) {
-  std::vector<std::unique_ptr<Expression>> params;
+  ExpressionList params;
   params.push_back(std::make_unique<IdentifierExpression>("ident"));
 
   auto ident_ptr = params[0].get();
@@ -38,7 +39,7 @@
 }
 
 TEST_F(UnaryMethodExpressionTest, Creation_WithSource) {
-  std::vector<std::unique_ptr<Expression>> params;
+  ExpressionList params;
   params.push_back(std::make_unique<IdentifierExpression>("ident"));
 
   UnaryMethodExpression u(Source{20, 2}, UnaryMethod::kAll, std::move(params));
@@ -53,7 +54,7 @@
 }
 
 TEST_F(UnaryMethodExpressionTest, IsValid) {
-  std::vector<std::unique_ptr<Expression>> params;
+  ExpressionList params;
   params.push_back(std::make_unique<IdentifierExpression>("ident"));
 
   UnaryMethodExpression u(UnaryMethod::kAll, std::move(params));
@@ -61,7 +62,7 @@
 }
 
 TEST_F(UnaryMethodExpressionTest, IsValid_NullParam) {
-  std::vector<std::unique_ptr<Expression>> params;
+  ExpressionList params;
   params.push_back(std::make_unique<IdentifierExpression>("ident"));
   params.push_back(nullptr);
 
@@ -70,7 +71,7 @@
 }
 
 TEST_F(UnaryMethodExpressionTest, IsValid_InvalidParam) {
-  std::vector<std::unique_ptr<Expression>> params;
+  ExpressionList params;
   params.push_back(std::make_unique<IdentifierExpression>(""));
 
   UnaryMethodExpression u(UnaryMethod::kAll, std::move(params));
@@ -84,7 +85,7 @@
 }
 
 TEST_F(UnaryMethodExpressionTest, ToStr) {
-  std::vector<std::unique_ptr<Expression>> params;
+  ExpressionList params;
   params.push_back(std::make_unique<IdentifierExpression>("ident"));
 
   UnaryMethodExpression u(UnaryMethod::kAll, std::move(params));
diff --git a/src/ast/unless_statement.cc b/src/ast/unless_statement.cc
index 10f287d..051d205 100644
--- a/src/ast/unless_statement.cc
+++ b/src/ast/unless_statement.cc
@@ -20,12 +20,12 @@
 UnlessStatement::UnlessStatement() : Statement() {}
 
 UnlessStatement::UnlessStatement(std::unique_ptr<Expression> condition,
-                                 std::vector<std::unique_ptr<Statement>> body)
+                                 StatementList body)
     : Statement(), condition_(std::move(condition)), body_(std::move(body)) {}
 
 UnlessStatement::UnlessStatement(const Source& source,
                                  std::unique_ptr<Expression> condition,
-                                 std::vector<std::unique_ptr<Statement>> body)
+                                 StatementList body)
     : Statement(source),
       condition_(std::move(condition)),
       body_(std::move(body)) {}
diff --git a/src/ast/unless_statement.h b/src/ast/unless_statement.h
index 26440b4..d3a4451 100644
--- a/src/ast/unless_statement.h
+++ b/src/ast/unless_statement.h
@@ -17,7 +17,6 @@
 
 #include <memory>
 #include <utility>
-#include <vector>
 
 #include "src/ast/expression.h"
 #include "src/ast/statement.h"
@@ -33,15 +32,14 @@
   /// Constructor
   /// @param condition the condition expression
   /// @param body the body statements
-  UnlessStatement(std::unique_ptr<Expression> condition,
-                  std::vector<std::unique_ptr<Statement>> body);
+  UnlessStatement(std::unique_ptr<Expression> condition, StatementList body);
   /// Constructor
   /// @param source the unless statement source
   /// @param condition the condition expression
   /// @param body the body statements
   UnlessStatement(const Source& source,
                   std::unique_ptr<Expression> condition,
-                  std::vector<std::unique_ptr<Statement>> body);
+                  StatementList body);
   /// Move constructor
   UnlessStatement(UnlessStatement&&) = default;
   ~UnlessStatement() override;
@@ -56,11 +54,9 @@
 
   /// Sets the body statements
   /// @param body the body statements
-  void set_body(std::vector<std::unique_ptr<Statement>> body) {
-    body_ = std::move(body);
-  }
+  void set_body(StatementList body) { body_ = std::move(body); }
   /// @returns the body statements
-  const std::vector<std::unique_ptr<Statement>>& body() const { return body_; }
+  const StatementList& body() const { return body_; }
 
   /// @returns true if this is an unless statement
   bool IsUnless() const override { return true; }
@@ -77,7 +73,7 @@
   UnlessStatement(const UnlessStatement&) = delete;
 
   std::unique_ptr<Expression> condition_;
-  std::vector<std::unique_ptr<Statement>> body_;
+  StatementList body_;
 };
 
 }  // namespace ast
diff --git a/src/ast/unless_statement_test.cc b/src/ast/unless_statement_test.cc
index 5cb9443..6937f9b 100644
--- a/src/ast/unless_statement_test.cc
+++ b/src/ast/unless_statement_test.cc
@@ -27,7 +27,7 @@
 
 TEST_F(UnlessStatementTest, Creation) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   auto ident_ptr = ident.get();
@@ -41,7 +41,7 @@
 
 TEST_F(UnlessStatementTest, Creation_WithSource) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   UnlessStatement u(Source{20, 2}, std::move(ident), std::move(body));
@@ -57,7 +57,7 @@
 
 TEST_F(UnlessStatementTest, IsValid) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   UnlessStatement u(std::move(ident), std::move(body));
@@ -65,7 +65,7 @@
 }
 
 TEST_F(UnlessStatementTest, IsValid_NullCondition) {
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   UnlessStatement u;
@@ -75,7 +75,7 @@
 
 TEST_F(UnlessStatementTest, IsValid_InvalidCondition) {
   auto ident = std::make_unique<IdentifierExpression>("");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   UnlessStatement u(std::move(ident), std::move(body));
@@ -84,7 +84,7 @@
 
 TEST_F(UnlessStatementTest, IsValid_NullBodyStatement) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
   body.push_back(nullptr);
 
@@ -94,7 +94,7 @@
 
 TEST_F(UnlessStatementTest, IsValid_InvalidBodyStatement) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
   body.push_back(std::make_unique<IfStatement>());
 
@@ -104,7 +104,7 @@
 
 TEST_F(UnlessStatementTest, ToStr) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  std::vector<std::unique_ptr<Statement>> body;
+  StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
   UnlessStatement u(std::move(ident), std::move(body));
diff --git a/src/ast/variable.h b/src/ast/variable.h
index b97b83b..196b3f8 100644
--- a/src/ast/variable.h
+++ b/src/ast/variable.h
@@ -19,6 +19,7 @@
 #include <ostream>
 #include <string>
 #include <utility>
+#include <vector>
 
 #include "src/ast/expression.h"
 #include "src/ast/node.h"
@@ -170,6 +171,9 @@
   std::unique_ptr<Expression> constructor_;
 };
 
+/// A list of unique variables
+using VariableList = std::vector<std::unique_ptr<Variable>>;
+
 }  // namespace ast
 }  // namespace tint
 
diff --git a/src/ast/variable_decoration.h b/src/ast/variable_decoration.h
index 2e7bd04..a468533 100644
--- a/src/ast/variable_decoration.h
+++ b/src/ast/variable_decoration.h
@@ -15,8 +15,10 @@
 #ifndef SRC_AST_VARIABLE_DECORATION_H_
 #define SRC_AST_VARIABLE_DECORATION_H_
 
+#include <memory>
 #include <ostream>
 #include <string>
+#include <vector>
 
 namespace tint {
 namespace ast {
@@ -57,6 +59,9 @@
   VariableDecoration();
 };
 
+/// A list of unique variable decorations
+using VariableDecorationList = std::vector<std::unique_ptr<VariableDecoration>>;
+
 }  // namespace ast
 }  // namespace tint
 
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index 4b25c61..0dc415e 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -549,7 +549,7 @@
   }
 
   // Compute members
-  std::vector<std::unique_ptr<ast::StructMember>> ast_members;
+  ast::StructMemberList ast_members;
   const auto members = struct_ty->element_types();
   for (uint32_t member_index = 0; member_index < members.size();
        ++member_index) {
@@ -558,8 +558,7 @@
       // Already emitted diagnostics.
       return nullptr;
     }
-    std::vector<std::unique_ptr<ast::StructMemberDecoration>>
-        ast_member_decorations;
+    ast::StructMemberDecorationList ast_member_decorations;
     for (auto& deco : GetDecorationsForMember(type_id, member_index)) {
       auto ast_member_decoration = ConvertMemberDecoration(deco);
       if (ast_member_decoration == nullptr) {
@@ -710,7 +709,7 @@
 
   auto ast_var = std::make_unique<ast::Variable>(Name(id), sc, type);
 
-  std::vector<std::unique_ptr<ast::VariableDecoration>> ast_decorations;
+  ast::VariableDecorationList ast_decorations;
   for (auto& deco : GetDecorationsFor(id)) {
     if (deco.empty()) {
       Fail() << "malformed decoration on ID " << id << ": it is empty";
@@ -774,7 +773,7 @@
            << f.result_id();
   }
 
-  std::vector<std::unique_ptr<ast::Variable>> ast_params;
+  ast::VariableList ast_params;
   f.ForEachParam([this, &ast_params](const spvtools::opt::Instruction* param) {
     auto* ast_type = ConvertType(param->type_id());
     if (ast_type != nullptr) {
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index 5916e70..dcc7229 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -15,6 +15,7 @@
 #include "src/reader/wgsl/parser_impl.h"
 
 #include <memory>
+#include <vector>
 
 #include "src/ast/array_accessor_expression.h"
 #include "src/ast/as_expression.h"
@@ -396,9 +397,8 @@
 
 // variable_decoration_list
 //  : ATTR_LEFT variable_decoration (COMMA variable_decoration)* ATTR_RIGHT
-std::vector<std::unique_ptr<ast::VariableDecoration>>
-ParserImpl::variable_decoration_list() {
-  std::vector<std::unique_ptr<ast::VariableDecoration>> decos;
+ast::VariableDecorationList ParserImpl::variable_decoration_list() {
+  ast::VariableDecorationList decos;
 
   auto t = peek();
   if (!t.IsAttrLeft())
@@ -1045,7 +1045,7 @@
 
 // struct_body_decl
 //   : BRACKET_LEFT struct_member* BRACKET_RIGHT
-std::vector<std::unique_ptr<ast::StructMember>> ParserImpl::struct_body_decl() {
+ast::StructMemberList ParserImpl::struct_body_decl() {
   auto t = peek();
   if (!t.IsBracketLeft())
     return {};
@@ -1056,7 +1056,7 @@
   if (t.IsBracketRight())
     return {};
 
-  std::vector<std::unique_ptr<ast::StructMember>> members;
+  ast::StructMemberList members;
   for (;;) {
     auto mem = struct_member();
     if (has_error())
@@ -1116,8 +1116,7 @@
 //   :
 //   | ATTR_LEFT (struct_member_decoration COMMA)*
 //                struct_member_decoration ATTR_RIGHT
-std::vector<std::unique_ptr<ast::StructMemberDecoration>>
-ParserImpl::struct_member_decoration_decl() {
+ast::StructMemberDecorationList ParserImpl::struct_member_decoration_decl() {
   auto t = peek();
   if (!t.IsAttrLeft())
     return {};
@@ -1130,7 +1129,7 @@
     return {};
   }
 
-  std::vector<std::unique_ptr<ast::StructMemberDecoration>> decos;
+  ast::StructMemberDecorationList decos;
   bool found_offset = false;
   for (;;) {
     auto deco = struct_member_decoration();
@@ -1266,11 +1265,11 @@
 // param_list
 //   :
 //   | (variable_ident_decl COMMA)* variable_ident_decl
-std::vector<std::unique_ptr<ast::Variable>> ParserImpl::param_list() {
+ast::VariableList ParserImpl::param_list() {
   auto t = peek();
   auto source = t.source();
 
-  std::vector<std::unique_ptr<ast::Variable>> ret;
+  ast::VariableList ret;
 
   std::string name;
   ast::type::Type* type;
@@ -1380,7 +1379,7 @@
 
 // body_stmt
 //   : BRACKET_LEFT statements BRACKET_RIGHT
-std::vector<std::unique_ptr<ast::Statement>> ParserImpl::body_stmt() {
+ast::StatementList ParserImpl::body_stmt() {
   auto t = peek();
   if (!t.IsBracketLeft())
     return {};
@@ -1429,8 +1428,8 @@
 
 // statements
 //   : statement*
-std::vector<std::unique_ptr<ast::Statement>> ParserImpl::statements() {
-  std::vector<std::unique_ptr<ast::Statement>> ret;
+ast::StatementList ParserImpl::statements() {
+  ast::StatementList ret;
 
   for (;;) {
     auto stmt = statement();
@@ -1782,12 +1781,12 @@
 
 // elseif_stmt
 //   : ELSE_IF paren_rhs_stmt body_stmt elseif_stmt?
-std::vector<std::unique_ptr<ast::ElseStatement>> ParserImpl::elseif_stmt() {
+ast::ElseStatementList ParserImpl::elseif_stmt() {
   auto t = peek();
   if (!t.IsElseIf())
     return {};
 
-  std::vector<std::unique_ptr<ast::ElseStatement>> ret;
+  ast::ElseStatementList ret;
   for (;;) {
     auto source = t.source();
     next();  // Consume the peek
@@ -1846,7 +1845,7 @@
 
 // premerge_stmt
 //   : PREMERGE body_stmt
-std::vector<std::unique_ptr<ast::Statement>> ParserImpl::premerge_stmt() {
+ast::StatementList ParserImpl::premerge_stmt() {
   auto t = peek();
   if (!t.IsPremerge())
     return {};
@@ -1931,7 +1930,7 @@
     return nullptr;
   }
 
-  std::vector<std::unique_ptr<ast::CaseStatement>> body;
+  ast::CaseStatementList body;
   for (;;) {
     auto stmt = switch_body();
     if (has_error())
@@ -2006,8 +2005,8 @@
 //   :
 //   | statement case_body
 //   | FALLTHROUGH SEMICOLON
-std::vector<std::unique_ptr<ast::Statement>> ParserImpl::case_body() {
-  std::vector<std::unique_ptr<ast::Statement>> ret;
+ast::StatementList ParserImpl::case_body() {
+  ast::StatementList ret;
   for (;;) {
     auto t = peek();
     if (t.IsFallthrough()) {
@@ -2072,7 +2071,7 @@
 
 // continuing_stmt
 //   : CONTINUING body_stmt
-std::vector<std::unique_ptr<ast::Statement>> ParserImpl::continuing_stmt() {
+ast::StatementList ParserImpl::continuing_stmt() {
   auto t = peek();
   if (!t.IsContinuing())
     return {};
@@ -2148,7 +2147,7 @@
       return nullptr;
     }
 
-    std::vector<std::unique_ptr<ast::Expression>> params;
+    ast::ExpressionList params;
     auto param = const_expr();
     if (has_error())
       return nullptr;
@@ -2313,8 +2312,7 @@
 
 // argument_expression_list
 //   : (logical_or_expression COMMA)* logical_or_expression
-std::vector<std::unique_ptr<ast::Expression>>
-ParserImpl::argument_expression_list() {
+ast::ExpressionList ParserImpl::argument_expression_list() {
   auto arg = logical_or_expression();
   if (has_error())
     return {};
@@ -2323,7 +2321,7 @@
     return {};
   }
 
-  std::vector<std::unique_ptr<ast::Expression>> ret;
+  ast::ExpressionList ret;
   ret.push_back(std::move(arg));
 
   for (;;) {
@@ -2379,7 +2377,7 @@
     next();  // Consume the peek
 
     t = peek();
-    std::vector<std::unique_ptr<ast::Expression>> params;
+    ast::ExpressionList params;
     if (!t.IsParenRight() && !t.IsEof()) {
       params = argument_expression_list();
       if (has_error())
@@ -2501,7 +2499,7 @@
       set_error(t, "missing identifier for method call");
       return nullptr;
     }
-    std::vector<std::unique_ptr<ast::Expression>> ident;
+    ast::ExpressionList ident;
     ident.push_back(
         std::make_unique<ast::IdentifierExpression>(source, t.to_str()));
 
@@ -2531,7 +2529,7 @@
       set_error(t, "missing identifier for method call");
       return nullptr;
     }
-    std::vector<std::unique_ptr<ast::Expression>> ident;
+    ast::ExpressionList ident;
     ident.push_back(
         std::make_unique<ast::IdentifierExpression>(source, t.to_str()));
 
diff --git a/src/reader/wgsl/parser_impl.h b/src/reader/wgsl/parser_impl.h
index ad39e3d..6027d1e 100644
--- a/src/reader/wgsl/parser_impl.h
+++ b/src/reader/wgsl/parser_impl.h
@@ -20,12 +20,12 @@
 #include <string>
 #include <unordered_map>
 #include <utility>
-#include <vector>
 
 #include "src/ast/assignment_statement.h"
 #include "src/ast/builtin.h"
 #include "src/ast/constructor_expression.h"
 #include "src/ast/derivative_modifier.h"
+#include "src/ast/else_statement.h"
 #include "src/ast/entry_point.h"
 #include "src/ast/function.h"
 #include "src/ast/import.h"
@@ -113,9 +113,8 @@
   /// @returns the const object or nullptr
   std::unique_ptr<ast::Variable> global_constant_decl();
   /// Parses a `variable_decoration_list` grammar element
-  /// @returns a vector of parsed variable decorations
-  std::vector<std::unique_ptr<ast::VariableDecoration>>
-  variable_decoration_list();
+  /// @returns the parsed variable decorations
+  ast::VariableDecorationList variable_decoration_list();
   /// Parses a `variable_decoration` grammar element
   /// @returns the variable decoration or nullptr if an error is encountered
   std::unique_ptr<ast::VariableDecoration> variable_decoration();
@@ -152,14 +151,13 @@
   ast::StructDecoration struct_decoration();
   /// Parses a `struct_body_decl` grammar element
   /// @returns the struct members
-  std::vector<std::unique_ptr<ast::StructMember>> struct_body_decl();
+  ast::StructMemberList struct_body_decl();
   /// Parses a `struct_member` grammar element
   /// @returns the struct member or nullptr
   std::unique_ptr<ast::StructMember> struct_member();
   /// Parses a `struct_member_decoration_decl` grammar element
   /// @returns the list of decorations
-  std::vector<std::unique_ptr<ast::StructMemberDecoration>>
-  struct_member_decoration_decl();
+  ast::StructMemberDecorationList struct_member_decoration_decl();
   /// Parses a `struct_member_decoration` grammar element
   /// @returns the decoration or nullptr if none found
   std::unique_ptr<ast::StructMemberDecoration> struct_member_decoration();
@@ -174,7 +172,7 @@
   std::unique_ptr<ast::Function> function_header();
   /// Parses a `param_list` grammar element
   /// @returns the parsed variables
-  std::vector<std::unique_ptr<ast::Variable>> param_list();
+  ast::VariableList param_list();
   /// Parses a `entry_point_decl` grammar element
   /// @returns the EntryPoint or nullptr on error
   std::unique_ptr<ast::EntryPoint> entry_point_decl();
@@ -183,13 +181,13 @@
   ast::PipelineStage pipeline_stage();
   /// Parses a `body_stmt` grammar element
   /// @returns the parsed statements
-  std::vector<std::unique_ptr<ast::Statement>> body_stmt();
+  ast::StatementList body_stmt();
   /// Parses a `paren_rhs_stmt` grammar element
   /// @returns the parsed element or nullptr
   std::unique_ptr<ast::Expression> paren_rhs_stmt();
   /// Parses a `statements` grammar element
   /// @returns the statements parsed
-  std::vector<std::unique_ptr<ast::Statement>> statements();
+  ast::StatementList statements();
   /// Parses a `statement` grammar element
   /// @returns the parsed statement or nullptr
   std::unique_ptr<ast::Statement> statement();
@@ -207,13 +205,13 @@
   std::unique_ptr<ast::IfStatement> if_stmt();
   /// Parses a `elseif_stmt` grammar element
   /// @returns the parsed elements
-  std::vector<std::unique_ptr<ast::ElseStatement>> elseif_stmt();
+  ast::ElseStatementList elseif_stmt();
   /// Parses a `else_stmt` grammar element
   /// @returns the parsed statement or nullptr
   std::unique_ptr<ast::ElseStatement> else_stmt();
   /// Parses a `premerge_stmt` grammar element
   /// @returns the parsed statements
-  std::vector<std::unique_ptr<ast::Statement>> premerge_stmt();
+  ast::StatementList premerge_stmt();
   /// Parses a `unless_stmt` grammar element
   /// @returns the parsed element or nullptr
   std::unique_ptr<ast::UnlessStatement> unless_stmt();
@@ -228,13 +226,13 @@
   std::unique_ptr<ast::CaseStatement> switch_body();
   /// Parses a `case_body` grammar element
   /// @returns the parsed statements
-  std::vector<std::unique_ptr<ast::Statement>> case_body();
+  ast::StatementList case_body();
   /// Parses a `loop_stmt` grammar element
   /// @returns the parsed loop or nullptr
   std::unique_ptr<ast::LoopStatement> loop_stmt();
   /// Parses a `continuing_stmt` grammar element
   /// @returns the parsed statements
-  std::vector<std::unique_ptr<ast::Statement>> continuing_stmt();
+  ast::StatementList continuing_stmt();
   /// Parses a `const_literal` grammar element
   /// @returns the const literal parsed or nullptr if none found
   std::unique_ptr<ast::Literal> const_literal();
@@ -246,7 +244,7 @@
   std::unique_ptr<ast::Expression> primary_expression();
   /// Parses a `argument_expression_list` grammar element
   /// @returns the list of arguments
-  std::vector<std::unique_ptr<ast::Expression>> argument_expression_list();
+  ast::ExpressionList argument_expression_list();
   /// Parses the recursive portion of the postfix_expression
   /// @param prefix the left side of the expression
   /// @returns the parsed expression or nullptr
diff --git a/src/writer/spirv/builder_constructor_expression_test.cc b/src/writer/spirv/builder_constructor_expression_test.cc
index 7a5fa2f..8e8d86e 100644
--- a/src/writer/spirv/builder_constructor_expression_test.cc
+++ b/src/writer/spirv/builder_constructor_expression_test.cc
@@ -51,7 +51,7 @@
   ast::type::F32Type f32;
   ast::type::VectorType vec(&f32, 3);
 
-  std::vector<std::unique_ptr<ast::Expression>> vals;
+  ast::ExpressionList vals;
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 1.0f)));
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
@@ -77,7 +77,7 @@
   ast::type::F32Type f32;
   ast::type::VectorType vec(&f32, 3);
 
-  std::vector<std::unique_ptr<ast::Expression>> vals;
+  ast::ExpressionList vals;
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 1.0f)));
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
@@ -103,7 +103,7 @@
       std::make_unique<ast::ScalarConstructorExpression>(
           std::make_unique<ast::FloatLiteral>(&f32, 3.0f)));
 
-  std::vector<std::unique_ptr<ast::Expression>> vals;
+  ast::ExpressionList vals;
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 1.0f)));
   vals.push_back(std::move(rel));
diff --git a/src/writer/spirv/builder_function_variable_test.cc b/src/writer/spirv/builder_function_variable_test.cc
index e97f0ef..108d585 100644
--- a/src/writer/spirv/builder_function_variable_test.cc
+++ b/src/writer/spirv/builder_function_variable_test.cc
@@ -62,7 +62,7 @@
   ast::type::F32Type f32;
   ast::type::VectorType vec(&f32, 3);
 
-  std::vector<std::unique_ptr<ast::Expression>> vals;
+  ast::ExpressionList vals;
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 1.0f)));
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
@@ -109,7 +109,7 @@
       std::make_unique<ast::ScalarConstructorExpression>(
           std::make_unique<ast::FloatLiteral>(&f32, 3.0f)));
 
-  std::vector<std::unique_ptr<ast::Expression>> vals;
+  ast::ExpressionList vals;
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 1.0f)));
   vals.push_back(std::move(rel));
@@ -147,7 +147,7 @@
   ast::type::F32Type f32;
   ast::type::VectorType vec(&f32, 3);
 
-  std::vector<std::unique_ptr<ast::Expression>> vals;
+  ast::ExpressionList vals;
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 1.0f)));
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
diff --git a/src/writer/spirv/builder_global_variable_test.cc b/src/writer/spirv/builder_global_variable_test.cc
index 09fed56..4591925 100644
--- a/src/writer/spirv/builder_global_variable_test.cc
+++ b/src/writer/spirv/builder_global_variable_test.cc
@@ -71,7 +71,7 @@
   ast::type::F32Type f32;
   ast::type::VectorType vec(&f32, 3);
 
-  std::vector<std::unique_ptr<ast::Expression>> vals;
+  ast::ExpressionList vals;
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 1.0f)));
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
@@ -105,7 +105,7 @@
   ast::type::F32Type f32;
   ast::type::VectorType vec(&f32, 3);
 
-  std::vector<std::unique_ptr<ast::Expression>> vals;
+  ast::ExpressionList vals;
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 1.0f)));
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
@@ -136,7 +136,7 @@
   ast::type::F32Type f32;
   auto v =
       std::make_unique<ast::Variable>("var", ast::StorageClass::kOutput, &f32);
-  std::vector<std::unique_ptr<ast::VariableDecoration>> decos;
+  ast::VariableDecorationList decos;
   decos.push_back(std::make_unique<ast::LocationDecoration>(5));
 
   ast::DecoratedVariable dv(std::move(v));
@@ -157,7 +157,7 @@
   ast::type::F32Type f32;
   auto v =
       std::make_unique<ast::Variable>("var", ast::StorageClass::kOutput, &f32);
-  std::vector<std::unique_ptr<ast::VariableDecoration>> decos;
+  ast::VariableDecorationList decos;
   decos.push_back(std::make_unique<ast::BindingDecoration>(2));
   decos.push_back(std::make_unique<ast::SetDecoration>(3));
 
@@ -180,7 +180,7 @@
   ast::type::F32Type f32;
   auto v =
       std::make_unique<ast::Variable>("var", ast::StorageClass::kOutput, &f32);
-  std::vector<std::unique_ptr<ast::VariableDecoration>> decos;
+  ast::VariableDecorationList decos;
   decos.push_back(
       std::make_unique<ast::BuiltinDecoration>(ast::Builtin::kPosition));
 
diff --git a/src/writer/spirv/builder_ident_expression_test.cc b/src/writer/spirv/builder_ident_expression_test.cc
index 0983c72..235c9e2 100644
--- a/src/writer/spirv/builder_ident_expression_test.cc
+++ b/src/writer/spirv/builder_ident_expression_test.cc
@@ -36,7 +36,7 @@
   ast::type::F32Type f32;
   ast::type::VectorType vec(&f32, 3);
 
-  std::vector<std::unique_ptr<ast::Expression>> vals;
+  ast::ExpressionList vals;
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 1.0f)));
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
@@ -87,7 +87,7 @@
   ast::type::F32Type f32;
   ast::type::VectorType vec(&f32, 3);
 
-  std::vector<std::unique_ptr<ast::Expression>> vals;
+  ast::ExpressionList vals;
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 1.0f)));
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
diff --git a/src/writer/spirv/builder_return_test.cc b/src/writer/spirv/builder_return_test.cc
index 2792876..91c0f56 100644
--- a/src/writer/spirv/builder_return_test.cc
+++ b/src/writer/spirv/builder_return_test.cc
@@ -47,7 +47,7 @@
   ast::type::F32Type f32;
   ast::type::VectorType vec(&f32, 3);
 
-  std::vector<std::unique_ptr<ast::Expression>> vals;
+  ast::ExpressionList vals;
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 1.0f)));
   vals.push_back(std::make_unique<ast::ScalarConstructorExpression>(
diff --git a/src/writer/spirv/builder_type_test.cc b/src/writer/spirv/builder_type_test.cc
index 064ce92..765c24b 100644
--- a/src/writer/spirv/builder_type_test.cc
+++ b/src/writer/spirv/builder_type_test.cc
@@ -277,8 +277,8 @@
 TEST_F(BuilderTest_Type, GenerateStruct) {
   ast::type::F32Type f32;
 
-  std::vector<std::unique_ptr<ast::StructMemberDecoration>> decos;
-  std::vector<std::unique_ptr<ast::StructMember>> members;
+  ast::StructMemberDecorationList decos;
+  ast::StructMemberList members;
   members.push_back(
       std::make_unique<ast::StructMember>("a", &f32, std::move(decos)));
 
@@ -303,8 +303,8 @@
 TEST_F(BuilderTest_Type, GenerateStruct_Decorated) {
   ast::type::F32Type f32;
 
-  std::vector<std::unique_ptr<ast::StructMemberDecoration>> decos;
-  std::vector<std::unique_ptr<ast::StructMember>> members;
+  ast::StructMemberDecorationList decos;
+  ast::StructMemberList members;
   members.push_back(
       std::make_unique<ast::StructMember>("a", &f32, std::move(decos)));
 
@@ -331,12 +331,12 @@
 TEST_F(BuilderTest_Type, GenerateStruct_DecoratedMembers) {
   ast::type::F32Type f32;
 
-  std::vector<std::unique_ptr<ast::StructMemberDecoration>> a_decos;
+  ast::StructMemberDecorationList a_decos;
   a_decos.push_back(std::make_unique<ast::StructMemberOffsetDecoration>(0));
-  std::vector<std::unique_ptr<ast::StructMemberDecoration>> b_decos;
+  ast::StructMemberDecorationList b_decos;
   b_decos.push_back(std::make_unique<ast::StructMemberOffsetDecoration>(8));
 
-  std::vector<std::unique_ptr<ast::StructMember>> members;
+  ast::StructMemberList members;
   members.push_back(
       std::make_unique<ast::StructMember>("a", &f32, std::move(a_decos)));
   members.push_back(
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index edc12bb..f16a358 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -690,8 +690,7 @@
   return true;
 }
 
-bool GeneratorImpl::EmitStatementBlock(
-    const std::vector<std::unique_ptr<ast::Statement>>& statements) {
+bool GeneratorImpl::EmitStatementBlock(const ast::StatementList& statements) {
   out_ << " {" << std::endl;
 
   increment_indent();
@@ -710,7 +709,7 @@
 }
 
 bool GeneratorImpl::EmitStatementBlockAndNewline(
-    const std::vector<std::unique_ptr<ast::Statement>>& statements) {
+    const ast::StatementList& statements) {
   const bool result = EmitStatementBlock(statements);
   if (result) {
     out_ << std::endl;
diff --git a/src/writer/wgsl/generator_impl.h b/src/writer/wgsl/generator_impl.h
index d8b26b3..dca64ad 100644
--- a/src/writer/wgsl/generator_impl.h
+++ b/src/writer/wgsl/generator_impl.h
@@ -15,10 +15,8 @@
 #ifndef SRC_WRITER_WGSL_GENERATOR_IMPL_H_
 #define SRC_WRITER_WGSL_GENERATOR_IMPL_H_
 
-#include <memory>
 #include <sstream>
 #include <string>
-#include <vector>
 
 #include "src/ast/array_accessor_expression.h"
 #include "src/ast/constructor_expression.h"
@@ -179,13 +177,11 @@
   /// Handles a brace-enclosed list of statements.
   /// @param statements the statements to output
   /// @returns true if the statements were emitted
-  bool EmitStatementBlock(
-      const std::vector<std::unique_ptr<ast::Statement>>& statements);
+  bool EmitStatementBlock(const ast::StatementList& statements);
   /// Handles a brace-enclosed list of statements and trailing newline.
   /// @param statements the statements to output
   /// @returns true if the statements were emitted
-  bool EmitStatementBlockAndNewline(
-      const std::vector<std::unique_ptr<ast::Statement>>& statements);
+  bool EmitStatementBlockAndNewline(const ast::StatementList& statements);
   /// Handles statement
   /// @param stmt the statement to emit
   /// @returns true if the statement was emitted
diff --git a/src/writer/wgsl/generator_impl_alias_type_test.cc b/src/writer/wgsl/generator_impl_alias_type_test.cc
index ef4d6f3..70891dc 100644
--- a/src/writer/wgsl/generator_impl_alias_type_test.cc
+++ b/src/writer/wgsl/generator_impl_alias_type_test.cc
@@ -43,11 +43,11 @@
   ast::type::I32Type i32;
   ast::type::F32Type f32;
 
-  std::vector<std::unique_ptr<ast::StructMember>> members;
+  ast::StructMemberList members;
   members.push_back(std::make_unique<ast::StructMember>(
-      "a", &f32, std::vector<std::unique_ptr<ast::StructMemberDecoration>>{}));
+      "a", &f32, ast::StructMemberDecorationList{}));
 
-  std::vector<std::unique_ptr<ast::StructMemberDecoration>> b_deco;
+  ast::StructMemberDecorationList b_deco;
   b_deco.push_back(std::make_unique<ast::StructMemberOffsetDecoration>(4));
   members.push_back(
       std::make_unique<ast::StructMember>("b", &i32, std::move(b_deco)));
diff --git a/src/writer/wgsl/generator_impl_call_test.cc b/src/writer/wgsl/generator_impl_call_test.cc
index 639c231..25f0083 100644
--- a/src/writer/wgsl/generator_impl_call_test.cc
+++ b/src/writer/wgsl/generator_impl_call_test.cc
@@ -37,7 +37,7 @@
 
 TEST_F(GeneratorImplTest, EmitExpression_Call_WithParams) {
   auto id = std::make_unique<ast::IdentifierExpression>("my_func");
-  std::vector<std::unique_ptr<ast::Expression>> params;
+  ast::ExpressionList params;
   params.push_back(std::make_unique<ast::IdentifierExpression>("param1"));
   params.push_back(std::make_unique<ast::IdentifierExpression>("param2"));
   ast::CallExpression call(std::move(id), std::move(params));
diff --git a/src/writer/wgsl/generator_impl_case_test.cc b/src/writer/wgsl/generator_impl_case_test.cc
index d23c785..d1c3fd1 100644
--- a/src/writer/wgsl/generator_impl_case_test.cc
+++ b/src/writer/wgsl/generator_impl_case_test.cc
@@ -13,7 +13,6 @@
 // limitations under the License.
 
 #include <memory>
-#include <vector>
 
 #include "gtest/gtest.h"
 #include "src/ast/break_statement.h"
@@ -34,7 +33,7 @@
   ast::type::I32Type i32;
   auto cond = std::make_unique<ast::IntLiteral>(&i32, 5);
 
-  std::vector<std::unique_ptr<ast::Statement>> body;
+  ast::StatementList body;
   body.push_back(std::make_unique<ast::BreakStatement>());
 
   ast::CaseStatement c(std::move(cond), std::move(body));
@@ -52,7 +51,7 @@
 TEST_F(GeneratorImplTest, Emit_Case_Default) {
   ast::CaseStatement c;
 
-  std::vector<std::unique_ptr<ast::Statement>> body;
+  ast::StatementList body;
   body.push_back(std::make_unique<ast::BreakStatement>());
 
   c.set_body(std::move(body));
diff --git a/src/writer/wgsl/generator_impl_constructor_test.cc b/src/writer/wgsl/generator_impl_constructor_test.cc
index 4b3cd9a..44b65d2 100644
--- a/src/writer/wgsl/generator_impl_constructor_test.cc
+++ b/src/writer/wgsl/generator_impl_constructor_test.cc
@@ -12,9 +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/bool_literal.h"
 #include "src/ast/float_literal.h"
@@ -81,7 +78,7 @@
   ast::type::F32Type f32;
 
   auto lit = std::make_unique<ast::FloatLiteral>(&f32, -1.2e-5);
-  std::vector<std::unique_ptr<ast::Expression>> values;
+  ast::ExpressionList values;
   values.push_back(
       std::make_unique<ast::ScalarConstructorExpression>(std::move(lit)));
 
@@ -96,7 +93,7 @@
   ast::type::BoolType b;
 
   auto lit = std::make_unique<ast::BoolLiteral>(&b, true);
-  std::vector<std::unique_ptr<ast::Expression>> values;
+  ast::ExpressionList values;
   values.push_back(
       std::make_unique<ast::ScalarConstructorExpression>(std::move(lit)));
 
@@ -111,7 +108,7 @@
   ast::type::I32Type i32;
 
   auto lit = std::make_unique<ast::IntLiteral>(&i32, -12345);
-  std::vector<std::unique_ptr<ast::Expression>> values;
+  ast::ExpressionList values;
   values.push_back(
       std::make_unique<ast::ScalarConstructorExpression>(std::move(lit)));
 
@@ -126,7 +123,7 @@
   ast::type::U32Type u32;
 
   auto lit = std::make_unique<ast::UintLiteral>(&u32, 12345);
-  std::vector<std::unique_ptr<ast::Expression>> values;
+  ast::ExpressionList values;
   values.push_back(
       std::make_unique<ast::ScalarConstructorExpression>(std::move(lit)));
 
@@ -144,7 +141,7 @@
   auto lit1 = std::make_unique<ast::FloatLiteral>(&f32, 1.f);
   auto lit2 = std::make_unique<ast::FloatLiteral>(&f32, 2.f);
   auto lit3 = std::make_unique<ast::FloatLiteral>(&f32, 3.f);
-  std::vector<std::unique_ptr<ast::Expression>> values;
+  ast::ExpressionList values;
   values.push_back(
       std::make_unique<ast::ScalarConstructorExpression>(std::move(lit1)));
   values.push_back(
@@ -165,13 +162,13 @@
 
   ast::type::VectorType vec(&f32, 2);
 
-  std::vector<std::unique_ptr<ast::Expression>> mat_values;
+  ast::ExpressionList mat_values;
 
   for (size_t i = 0; i < 3; i++) {
     auto lit1 = std::make_unique<ast::FloatLiteral>(&f32, 1.f + (i * 2));
     auto lit2 = std::make_unique<ast::FloatLiteral>(&f32, 2.f + (i * 2));
 
-    std::vector<std::unique_ptr<ast::Expression>> values;
+    ast::ExpressionList values;
     values.push_back(
         std::make_unique<ast::ScalarConstructorExpression>(std::move(lit1)));
     values.push_back(
@@ -196,14 +193,14 @@
   ast::type::VectorType vec(&f32, 3);
   ast::type::ArrayType ary(&vec, 3);
 
-  std::vector<std::unique_ptr<ast::Expression>> ary_values;
+  ast::ExpressionList ary_values;
 
   for (size_t i = 0; i < 3; i++) {
     auto lit1 = std::make_unique<ast::FloatLiteral>(&f32, 1.f + (i * 3));
     auto lit2 = std::make_unique<ast::FloatLiteral>(&f32, 2.f + (i * 3));
     auto lit3 = std::make_unique<ast::FloatLiteral>(&f32, 3.f + (i * 3));
 
-    std::vector<std::unique_ptr<ast::Expression>> values;
+    ast::ExpressionList values;
     values.push_back(
         std::make_unique<ast::ScalarConstructorExpression>(std::move(lit1)));
     values.push_back(
diff --git a/src/writer/wgsl/generator_impl_else_test.cc b/src/writer/wgsl/generator_impl_else_test.cc
index 561babf..52fc4a0 100644
--- a/src/writer/wgsl/generator_impl_else_test.cc
+++ b/src/writer/wgsl/generator_impl_else_test.cc
@@ -13,7 +13,6 @@
 // limitations under the License.
 
 #include <memory>
-#include <vector>
 
 #include "gtest/gtest.h"
 #include "src/ast/else_statement.h"
@@ -29,7 +28,7 @@
 using GeneratorImplTest = testing::Test;
 
 TEST_F(GeneratorImplTest, Emit_Else) {
-  std::vector<std::unique_ptr<ast::Statement>> body;
+  ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
 
   ast::ElseStatement e(std::move(body));
@@ -46,7 +45,7 @@
 TEST_F(GeneratorImplTest, Emit_ElseWithCondition) {
   auto cond = std::make_unique<ast::IdentifierExpression>("cond");
 
-  std::vector<std::unique_ptr<ast::Statement>> body;
+  ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
 
   ast::ElseStatement e(std::move(cond), std::move(body));
diff --git a/src/writer/wgsl/generator_impl_function_test.cc b/src/writer/wgsl/generator_impl_function_test.cc
index 53fa44c..274f789 100644
--- a/src/writer/wgsl/generator_impl_function_test.cc
+++ b/src/writer/wgsl/generator_impl_function_test.cc
@@ -30,7 +30,7 @@
 using GeneratorImplTest = testing::Test;
 
 TEST_F(GeneratorImplTest, Emit_Function) {
-  std::vector<std::unique_ptr<ast::Statement>> body;
+  ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
   body.push_back(std::make_unique<ast::ReturnStatement>());
 
@@ -50,13 +50,13 @@
 }
 
 TEST_F(GeneratorImplTest, Emit_Function_WithParams) {
-  std::vector<std::unique_ptr<ast::Statement>> body;
+  ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
   body.push_back(std::make_unique<ast::ReturnStatement>());
 
   ast::type::F32Type f32;
   ast::type::I32Type i32;
-  std::vector<std::unique_ptr<ast::Variable>> params;
+  ast::VariableList params;
   params.push_back(
       std::make_unique<ast::Variable>("a", ast::StorageClass::kNone, &f32));
   params.push_back(
diff --git a/src/writer/wgsl/generator_impl_if_test.cc b/src/writer/wgsl/generator_impl_if_test.cc
index 274c7c0..99609ec 100644
--- a/src/writer/wgsl/generator_impl_if_test.cc
+++ b/src/writer/wgsl/generator_impl_if_test.cc
@@ -12,9 +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/else_statement.h"
 #include "src/ast/identifier_expression.h"
@@ -31,7 +28,7 @@
 
 TEST_F(GeneratorImplTest, Emit_If) {
   auto cond = std::make_unique<ast::IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<ast::Statement>> body;
+  ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
 
   ast::IfStatement i(std::move(cond), std::move(body));
@@ -49,15 +46,15 @@
 TEST_F(GeneratorImplTest, Emit_IfWithElseIf) {
   auto else_cond = std::make_unique<ast::IdentifierExpression>("else_cond");
 
-  std::vector<std::unique_ptr<ast::Statement>> else_body;
+  ast::StatementList else_body;
   else_body.push_back(std::make_unique<ast::KillStatement>());
 
-  std::vector<std::unique_ptr<ast::ElseStatement>> elses;
+  ast::ElseStatementList elses;
   elses.push_back(std::make_unique<ast::ElseStatement>(std::move(else_cond),
                                                        std::move(else_body)));
 
   auto cond = std::make_unique<ast::IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<ast::Statement>> body;
+  ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
 
   ast::IfStatement i(std::move(cond), std::move(body));
@@ -76,14 +73,14 @@
 }
 
 TEST_F(GeneratorImplTest, Emit_IfWithElse) {
-  std::vector<std::unique_ptr<ast::Statement>> else_body;
+  ast::StatementList else_body;
   else_body.push_back(std::make_unique<ast::KillStatement>());
 
-  std::vector<std::unique_ptr<ast::ElseStatement>> elses;
+  ast::ElseStatementList elses;
   elses.push_back(std::make_unique<ast::ElseStatement>(std::move(else_body)));
 
   auto cond = std::make_unique<ast::IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<ast::Statement>> body;
+  ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
 
   ast::IfStatement i(std::move(cond), std::move(body));
@@ -104,19 +101,19 @@
 TEST_F(GeneratorImplTest, Emit_IfWithMultiple) {
   auto else_cond = std::make_unique<ast::IdentifierExpression>("else_cond");
 
-  std::vector<std::unique_ptr<ast::Statement>> else_body;
+  ast::StatementList else_body;
   else_body.push_back(std::make_unique<ast::KillStatement>());
 
-  std::vector<std::unique_ptr<ast::Statement>> else_body_2;
+  ast::StatementList else_body_2;
   else_body_2.push_back(std::make_unique<ast::KillStatement>());
 
-  std::vector<std::unique_ptr<ast::ElseStatement>> elses;
+  ast::ElseStatementList elses;
   elses.push_back(std::make_unique<ast::ElseStatement>(std::move(else_cond),
                                                        std::move(else_body)));
   elses.push_back(std::make_unique<ast::ElseStatement>(std::move(else_body_2)));
 
   auto cond = std::make_unique<ast::IdentifierExpression>("cond");
-  std::vector<std::unique_ptr<ast::Statement>> body;
+  ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
 
   ast::IfStatement i(std::move(cond), std::move(body));
diff --git a/src/writer/wgsl/generator_impl_loop_test.cc b/src/writer/wgsl/generator_impl_loop_test.cc
index beb2a5c..4ddc0da 100644
--- a/src/writer/wgsl/generator_impl_loop_test.cc
+++ b/src/writer/wgsl/generator_impl_loop_test.cc
@@ -13,7 +13,6 @@
 // limitations under the License.
 
 #include <memory>
-#include <vector>
 
 #include "gtest/gtest.h"
 #include "src/ast/kill_statement.h"
@@ -29,7 +28,7 @@
 using GeneratorImplTest = testing::Test;
 
 TEST_F(GeneratorImplTest, Emit_Loop) {
-  std::vector<std::unique_ptr<ast::Statement>> body;
+  ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
 
   ast::LoopStatement l(std::move(body), {});
@@ -45,10 +44,10 @@
 }
 
 TEST_F(GeneratorImplTest, Emit_LoopWithContinuing) {
-  std::vector<std::unique_ptr<ast::Statement>> body;
+  ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
 
-  std::vector<std::unique_ptr<ast::Statement>> continuing;
+  ast::StatementList continuing;
   continuing.push_back(std::make_unique<ast::NopStatement>());
 
   ast::LoopStatement l(std::move(body), std::move(continuing));
diff --git a/src/writer/wgsl/generator_impl_regardless_test.cc b/src/writer/wgsl/generator_impl_regardless_test.cc
index 4561921..3a62297 100644
--- a/src/writer/wgsl/generator_impl_regardless_test.cc
+++ b/src/writer/wgsl/generator_impl_regardless_test.cc
@@ -13,7 +13,6 @@
 // limitations under the License.
 
 #include <memory>
-#include <vector>
 
 #include "gtest/gtest.h"
 #include "src/ast/identifier_expression.h"
@@ -32,7 +31,7 @@
 TEST_F(GeneratorImplTest, Emit_Regardless) {
   auto cond = std::make_unique<ast::IdentifierExpression>("cond");
 
-  std::vector<std::unique_ptr<ast::Statement>> body;
+  ast::StatementList body;
   body.push_back(std::make_unique<ast::NopStatement>());
   body.push_back(std::make_unique<ast::KillStatement>());
 
diff --git a/src/writer/wgsl/generator_impl_switch_test.cc b/src/writer/wgsl/generator_impl_switch_test.cc
index af82f6d..b784f21 100644
--- a/src/writer/wgsl/generator_impl_switch_test.cc
+++ b/src/writer/wgsl/generator_impl_switch_test.cc
@@ -13,7 +13,6 @@
 // limitations under the License.
 
 #include <memory>
-#include <vector>
 
 #include "gtest/gtest.h"
 #include "src/ast/break_statement.h"
@@ -33,19 +32,19 @@
 
 TEST_F(GeneratorImplTest, Emit_Switch) {
   auto def = std::make_unique<ast::CaseStatement>();
-  std::vector<std::unique_ptr<ast::Statement>> def_body;
+  ast::StatementList def_body;
   def_body.push_back(std::make_unique<ast::BreakStatement>());
   def->set_body(std::move(def_body));
 
   ast::type::I32Type i32;
   auto case_val = std::make_unique<ast::IntLiteral>(&i32, 5);
-  std::vector<std::unique_ptr<ast::Statement>> case_body;
+  ast::StatementList case_body;
   case_body.push_back(std::make_unique<ast::BreakStatement>());
 
   auto case_stmt = std::make_unique<ast::CaseStatement>(std::move(case_val),
                                                         std::move(case_body));
 
-  std::vector<std::unique_ptr<ast::CaseStatement>> body;
+  ast::CaseStatementList body;
   body.push_back(std::move(case_stmt));
   body.push_back(std::move(def));
 
diff --git a/src/writer/wgsl/generator_impl_type_test.cc b/src/writer/wgsl/generator_impl_type_test.cc
index 86e2489..b9705b8 100644
--- a/src/writer/wgsl/generator_impl_type_test.cc
+++ b/src/writer/wgsl/generator_impl_type_test.cc
@@ -110,11 +110,11 @@
   ast::type::I32Type i32;
   ast::type::F32Type f32;
 
-  std::vector<std::unique_ptr<ast::StructMember>> members;
+  ast::StructMemberList members;
   members.push_back(std::make_unique<ast::StructMember>(
-      "a", &i32, std::vector<std::unique_ptr<ast::StructMemberDecoration>>{}));
+      "a", &i32, ast::StructMemberDecorationList{}));
 
-  std::vector<std::unique_ptr<ast::StructMemberDecoration>> b_deco;
+  ast::StructMemberDecorationList b_deco;
   b_deco.push_back(std::make_unique<ast::StructMemberOffsetDecoration>(4));
   members.push_back(
       std::make_unique<ast::StructMember>("b", &f32, std::move(b_deco)));
@@ -136,11 +136,11 @@
   ast::type::I32Type i32;
   ast::type::F32Type f32;
 
-  std::vector<std::unique_ptr<ast::StructMember>> members;
+  ast::StructMemberList members;
   members.push_back(std::make_unique<ast::StructMember>(
-      "a", &i32, std::vector<std::unique_ptr<ast::StructMemberDecoration>>{}));
+      "a", &i32, ast::StructMemberDecorationList{}));
 
-  std::vector<std::unique_ptr<ast::StructMemberDecoration>> b_deco;
+  ast::StructMemberDecorationList b_deco;
   b_deco.push_back(std::make_unique<ast::StructMemberOffsetDecoration>(4));
   members.push_back(
       std::make_unique<ast::StructMember>("b", &f32, std::move(b_deco)));
diff --git a/src/writer/wgsl/generator_impl_unary_method_test.cc b/src/writer/wgsl/generator_impl_unary_method_test.cc
index 32455bf..83eff87 100644
--- a/src/writer/wgsl/generator_impl_unary_method_test.cc
+++ b/src/writer/wgsl/generator_impl_unary_method_test.cc
@@ -13,7 +13,6 @@
 // limitations under the License.
 
 #include <memory>
-#include <vector>
 
 #include "gtest/gtest.h"
 #include "src/ast/identifier_expression.h"
@@ -38,7 +37,7 @@
   auto params = GetParam();
 
   auto expr = std::make_unique<ast::IdentifierExpression>("expr");
-  std::vector<std::unique_ptr<ast::Expression>> ops;
+  ast::ExpressionList ops;
   ops.push_back(std::move(expr));
 
   ast::UnaryMethodExpression method(params.method, std::move(ops));
@@ -62,7 +61,7 @@
 
   auto expr1 = std::make_unique<ast::IdentifierExpression>("expr1");
   auto expr2 = std::make_unique<ast::IdentifierExpression>("expr2");
-  std::vector<std::unique_ptr<ast::Expression>> ops;
+  ast::ExpressionList ops;
   ops.push_back(std::move(expr1));
   ops.push_back(std::move(expr2));
 
diff --git a/src/writer/wgsl/generator_impl_unless_test.cc b/src/writer/wgsl/generator_impl_unless_test.cc
index 47c206b..721f877 100644
--- a/src/writer/wgsl/generator_impl_unless_test.cc
+++ b/src/writer/wgsl/generator_impl_unless_test.cc
@@ -13,7 +13,6 @@
 // limitations under the License.
 
 #include <memory>
-#include <vector>
 
 #include "gtest/gtest.h"
 #include "src/ast/identifier_expression.h"
@@ -32,7 +31,7 @@
 TEST_F(GeneratorImplTest, Emit_Unless) {
   auto cond = std::make_unique<ast::IdentifierExpression>("cond");
 
-  std::vector<std::unique_ptr<ast::Statement>> body;
+  ast::StatementList body;
   body.push_back(std::make_unique<ast::NopStatement>());
   body.push_back(std::make_unique<ast::KillStatement>());
 
diff --git a/src/writer/wgsl/generator_impl_variable_test.cc b/src/writer/wgsl/generator_impl_variable_test.cc
index dce656a..8d2d2bb 100644
--- a/src/writer/wgsl/generator_impl_variable_test.cc
+++ b/src/writer/wgsl/generator_impl_variable_test.cc
@@ -13,7 +13,6 @@
 // limitations under the License.
 
 #include <memory>
-#include <vector>
 
 #include "gtest/gtest.h"
 #include "src/ast/binding_decoration.h"
@@ -55,7 +54,7 @@
 TEST_F(GeneratorImplTest, EmitVariable_Decorated) {
   ast::type::F32Type f32;
 
-  std::vector<std::unique_ptr<ast::VariableDecoration>> decos;
+  ast::VariableDecorationList decos;
   decos.push_back(std::make_unique<ast::LocationDecoration>(2));
 
   ast::DecoratedVariable dv;
@@ -72,7 +71,7 @@
 TEST_F(GeneratorImplTest, EmitVariable_Decorated_Multiple) {
   ast::type::F32Type f32;
 
-  std::vector<std::unique_ptr<ast::VariableDecoration>> decos;
+  ast::VariableDecorationList decos;
   decos.push_back(
       std::make_unique<ast::BuiltinDecoration>(ast::Builtin::kPosition));
   decos.push_back(std::make_unique<ast::BindingDecoration>(0));
