diff --git a/fuzzers/tint_ast_fuzzer/mutations/replace_identifier_test.cc b/fuzzers/tint_ast_fuzzer/mutations/replace_identifier_test.cc
index d3a125f..b52918e 100644
--- a/fuzzers/tint_ast_fuzzer/mutations/replace_identifier_test.cc
+++ b/fuzzers/tint_ast_fuzzer/mutations/replace_identifier_test.cc
@@ -487,7 +487,7 @@
                                       .Functions()[0]
                                       ->body->statements[2]
                                       ->As<ast::AssignmentStatement>()
-                                      ->lhs->As<ast::ArrayAccessorExpression>()
+                                      ->lhs->As<ast::IndexAccessorExpression>()
                                       ->array->As<ast::UnaryOpExpression>()
                                       ->expr->As<ast::UnaryOpExpression>()
                                       ->expr);
@@ -537,7 +537,7 @@
                                       .Functions()[0]
                                       ->body->statements[2]
                                       ->As<ast::AssignmentStatement>()
-                                      ->lhs->As<ast::ArrayAccessorExpression>()
+                                      ->lhs->As<ast::IndexAccessorExpression>()
                                       ->array->As<ast::UnaryOpExpression>()
                                       ->expr);
   ASSERT_NE(use_id, 0);
@@ -584,7 +584,7 @@
                                       .Functions()[0]
                                       ->body->statements[1]
                                       ->As<ast::AssignmentStatement>()
-                                      ->lhs->As<ast::ArrayAccessorExpression>()
+                                      ->lhs->As<ast::IndexAccessorExpression>()
                                       ->array->As<ast::UnaryOpExpression>()
                                       ->expr->As<ast::UnaryOpExpression>()
                                       ->expr);
@@ -613,15 +613,15 @@
 
   NodeIdMap node_id_map(program);
 
-  auto use_id = node_id_map.GetId(
-      program.AST()
-          .Functions()[0]
-          ->body->statements[1]
-          ->As<ast::VariableDeclStatement>()
-          ->variable->constructor->As<ast::ArrayAccessorExpression>()
-          ->array->As<ast::UnaryOpExpression>()
-          ->expr->As<ast::UnaryOpExpression>()
-          ->expr);
+  auto use_id =
+      node_id_map.GetId(program.AST()
+                            .Functions()[0]
+                            ->body->statements[1]
+                            ->As<ast::VariableDeclStatement>()
+                            ->variable->constructor->As<ast::IndexAccessorExpression>()
+                            ->array->As<ast::UnaryOpExpression>()
+                            ->expr->As<ast::UnaryOpExpression>()
+                            ->expr);
   ASSERT_NE(use_id, 0);
 
   auto replacement_id = node_id_map.GetId(program.AST().GlobalVariables()[0]);
@@ -649,14 +649,14 @@
 
   NodeIdMap node_id_map(program);
 
-  auto use_id = node_id_map.GetId(
-      program.AST()
-          .Functions()[0]
-          ->body->statements[3]
-          ->As<ast::VariableDeclStatement>()
-          ->variable->constructor->As<ast::ArrayAccessorExpression>()
-          ->array->As<ast::UnaryOpExpression>()
-          ->expr);
+  auto use_id =
+      node_id_map.GetId(program.AST()
+                            .Functions()[0]
+                            ->body->statements[3]
+                            ->As<ast::VariableDeclStatement>()
+                            ->variable->constructor->As<ast::IndexAccessorExpression>()
+                            ->array->As<ast::UnaryOpExpression>()
+                            ->expr);
   ASSERT_NE(use_id, 0);
 
   auto replacement_id = node_id_map.GetId(program.AST()
diff --git a/src/BUILD.gn b/src/BUILD.gn
index 86fa2ba..2dc31b8 100644
--- a/src/BUILD.gn
+++ b/src/BUILD.gn
@@ -179,8 +179,6 @@
     "ast/alias.h",
     "ast/array.cc",
     "ast/array.h",
-    "ast/array_accessor_expression.cc",
-    "ast/array_accessor_expression.h",
     "ast/assignment_statement.cc",
     "ast/assignment_statement.h",
     "ast/ast_type.cc",  # TODO(bclayton) - rename to type.cc
@@ -248,6 +246,8 @@
     "ast/identifier_expression.h",
     "ast/if_statement.cc",
     "ast/if_statement.h",
+    "ast/index_accessor_expression.cc",
+    "ast/index_accessor_expression.h",
     "ast/int_literal_expression.cc",
     "ast/int_literal_expression.h",
     "ast/internal_decoration.cc",
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index dec0ab0..50090cd 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -42,8 +42,8 @@
   ast/access.h
   ast/alias.cc
   ast/alias.h
-  ast/array_accessor_expression.cc
-  ast/array_accessor_expression.h
+  ast/index_accessor_expression.cc
+  ast/index_accessor_expression.h
   ast/array.cc
   ast/array.h
   ast/assignment_statement.cc
@@ -581,7 +581,6 @@
 if(${TINT_BUILD_TESTS})
   set(TINT_TEST_SRCS
     ast/alias_test.cc
-    ast/array_accessor_expression_test.cc
     ast/array_test.cc
     ast/assignment_statement_test.cc
     ast/atomic_test.cc
@@ -611,6 +610,7 @@
     ast/i32_test.cc
     ast/identifier_expression_test.cc
     ast/if_statement_test.cc
+    ast/index_accessor_expression_test.cc
     ast/int_literal_expression_test.cc
     ast/interpolate_decoration_test.cc
     ast/intrinsic_texture_helper_test.cc
diff --git a/src/ast/array_accessor_expression.cc b/src/ast/index_accessor_expression.cc
similarity index 76%
rename from src/ast/array_accessor_expression.cc
rename to src/ast/index_accessor_expression.cc
index cf2fb7b..446f782 100644
--- a/src/ast/array_accessor_expression.cc
+++ b/src/ast/index_accessor_expression.cc
@@ -12,16 +12,16 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/array_accessor_expression.h"
+#include "src/ast/index_accessor_expression.h"
 
 #include "src/program_builder.h"
 
-TINT_INSTANTIATE_TYPEINFO(tint::ast::ArrayAccessorExpression);
+TINT_INSTANTIATE_TYPEINFO(tint::ast::IndexAccessorExpression);
 
 namespace tint {
 namespace ast {
 
-ArrayAccessorExpression::ArrayAccessorExpression(ProgramID pid,
+IndexAccessorExpression::IndexAccessorExpression(ProgramID pid,
                                                  const Source& src,
                                                  const Expression* arr,
                                                  const Expression* idx)
@@ -32,18 +32,18 @@
   TINT_ASSERT_PROGRAM_IDS_EQUAL_IF_VALID(AST, idx, program_id);
 }
 
-ArrayAccessorExpression::ArrayAccessorExpression(ArrayAccessorExpression&&) =
+IndexAccessorExpression::IndexAccessorExpression(IndexAccessorExpression&&) =
     default;
 
-ArrayAccessorExpression::~ArrayAccessorExpression() = default;
+IndexAccessorExpression::~IndexAccessorExpression() = default;
 
-const ArrayAccessorExpression* ArrayAccessorExpression::Clone(
+const IndexAccessorExpression* IndexAccessorExpression::Clone(
     CloneContext* ctx) const {
   // Clone arguments outside of create() call to have deterministic ordering
   auto src = ctx->Clone(source);
   auto* arr = ctx->Clone(array);
   auto* idx = ctx->Clone(index);
-  return ctx->dst->create<ArrayAccessorExpression>(src, arr, idx);
+  return ctx->dst->create<IndexAccessorExpression>(src, arr, idx);
 }
 
 }  // namespace ast
diff --git a/src/ast/array_accessor_expression.h b/src/ast/index_accessor_expression.h
similarity index 76%
rename from src/ast/array_accessor_expression.h
rename to src/ast/index_accessor_expression.h
index 0cb1e47..ffe38cb 100644
--- a/src/ast/array_accessor_expression.h
+++ b/src/ast/index_accessor_expression.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_ARRAY_ACCESSOR_EXPRESSION_H_
-#define SRC_AST_ARRAY_ACCESSOR_EXPRESSION_H_
+#ifndef SRC_AST_INDEX_ACCESSOR_EXPRESSION_H_
+#define SRC_AST_INDEX_ACCESSOR_EXPRESSION_H_
 
 #include "src/ast/expression.h"
 
@@ -21,27 +21,27 @@
 namespace ast {
 
 /// An array accessor expression
-class ArrayAccessorExpression
-    : public Castable<ArrayAccessorExpression, Expression> {
+class IndexAccessorExpression
+    : public Castable<IndexAccessorExpression, Expression> {
  public:
   /// Constructor
   /// @param program_id the identifier of the program that owns this node
   /// @param source the array accessor source
   /// @param arr the array
   /// @param idx the index expression
-  ArrayAccessorExpression(ProgramID program_id,
+  IndexAccessorExpression(ProgramID program_id,
                           const Source& source,
                           const Expression* arr,
                           const Expression* idx);
   /// Move constructor
-  ArrayAccessorExpression(ArrayAccessorExpression&&);
-  ~ArrayAccessorExpression() override;
+  IndexAccessorExpression(IndexAccessorExpression&&);
+  ~IndexAccessorExpression() override;
 
   /// Clones this node and all transitive child nodes using the `CloneContext`
   /// `ctx`.
   /// @param ctx the clone context
   /// @return the newly cloned node
-  const ArrayAccessorExpression* Clone(CloneContext* ctx) const override;
+  const IndexAccessorExpression* Clone(CloneContext* ctx) const override;
 
   /// the array
   const Expression* const array;
@@ -53,4 +53,4 @@
 }  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_ARRAY_ACCESSOR_EXPRESSION_H_
+#endif  // SRC_AST_INDEX_ACCESSOR_EXPRESSION_H_
diff --git a/src/ast/array_accessor_expression_test.cc b/src/ast/index_accessor_expression_test.cc
similarity index 60%
rename from src/ast/array_accessor_expression_test.cc
rename to src/ast/index_accessor_expression_test.cc
index 93f374a..f7fb504 100644
--- a/src/ast/array_accessor_expression_test.cc
+++ b/src/ast/index_accessor_expression_test.cc
@@ -19,70 +19,69 @@
 namespace ast {
 namespace {
 
-using ArrayAccessorExpressionTest = TestHelper;
+using IndexAccessorExpressionTest = TestHelper;
 
-TEST_F(ArrayAccessorExpressionTest, Create) {
+TEST_F(IndexAccessorExpressionTest, Create) {
   auto* ary = Expr("ary");
   auto* idx = Expr("idx");
 
-  auto* exp = create<ArrayAccessorExpression>(ary, idx);
+  auto* exp = IndexAccessor(ary, idx);
   ASSERT_EQ(exp->array, ary);
   ASSERT_EQ(exp->index, idx);
 }
 
-TEST_F(ArrayAccessorExpressionTest, CreateWithSource) {
+TEST_F(IndexAccessorExpressionTest, CreateWithSource) {
   auto* ary = Expr("ary");
   auto* idx = Expr("idx");
 
-  auto* exp = create<ArrayAccessorExpression>(Source{Source::Location{20, 2}},
-                                              ary, idx);
+  auto* exp = IndexAccessor(Source{{20, 2}}, ary, idx);
   auto src = exp->source;
   EXPECT_EQ(src.range.begin.line, 20u);
   EXPECT_EQ(src.range.begin.column, 2u);
 }
 
-TEST_F(ArrayAccessorExpressionTest, IsArrayAccessor) {
+TEST_F(IndexAccessorExpressionTest, IsIndexAccessor) {
   auto* ary = Expr("ary");
   auto* idx = Expr("idx");
 
-  auto* exp = create<ArrayAccessorExpression>(ary, idx);
-  EXPECT_TRUE(exp->Is<ArrayAccessorExpression>());
+  auto* exp = IndexAccessor(ary, idx);
+  EXPECT_TRUE(exp->Is<IndexAccessorExpression>());
 }
 
-TEST_F(ArrayAccessorExpressionTest, Assert_Null_Array) {
+TEST_F(IndexAccessorExpressionTest, Assert_Null_Array) {
   EXPECT_FATAL_FAILURE(
       {
         ProgramBuilder b;
-        b.create<ArrayAccessorExpression>(nullptr, b.Expr("idx"));
+        b.IndexAccessor(nullptr, b.Expr("idx"));
       },
       "internal compiler error");
 }
 
-TEST_F(ArrayAccessorExpressionTest, Assert_Null_Index) {
+TEST_F(IndexAccessorExpressionTest, Assert_Null_Index) {
   EXPECT_FATAL_FAILURE(
       {
         ProgramBuilder b;
-        b.create<ArrayAccessorExpression>(b.Expr("arr"), nullptr);
+        b.IndexAccessor(b.Expr("arr"), nullptr);
       },
       "internal compiler error");
 }
 
-TEST_F(ArrayAccessorExpressionTest, Assert_DifferentProgramID_Array) {
+TEST_F(IndexAccessorExpressionTest, Assert_DifferentProgramID_Array) {
   EXPECT_FATAL_FAILURE(
       {
         ProgramBuilder b1;
         ProgramBuilder b2;
-        b1.create<ArrayAccessorExpression>(b2.Expr("arr"), b1.Expr("idx"));
+        b1.IndexAccessor(b2.Expr("arr"), b1.Expr("idx"));
       },
       "internal compiler error");
 }
 
-TEST_F(ArrayAccessorExpressionTest, Assert_DifferentProgramID_Index) {
+TEST_F(IndexAccessorExpressionTest, Assert_DifferentProgramID_Index) {
   EXPECT_FATAL_FAILURE(
       {
         ProgramBuilder b1;
         ProgramBuilder b2;
-        b1.create<ArrayAccessorExpression>(b1.Expr("arr"), b2.Expr("idx"));
+        b1.IndexAccessor(b1.Expr("arr"), b2.Expr("idx"));
       },
       "internal compiler error");
 }
diff --git a/src/ast/traverse_expressions.h b/src/ast/traverse_expressions.h
index c169775..9ee03c5 100644
--- a/src/ast/traverse_expressions.h
+++ b/src/ast/traverse_expressions.h
@@ -17,10 +17,10 @@
 
 #include <vector>
 
-#include "src/ast/array_accessor_expression.h"
 #include "src/ast/binary_expression.h"
 #include "src/ast/bitcast_expression.h"
 #include "src/ast/call_expression.h"
+#include "src/ast/index_accessor_expression.h"
 #include "src/ast/literal_expression.h"
 #include "src/ast/member_accessor_expression.h"
 #include "src/ast/phony_expression.h"
@@ -102,28 +102,28 @@
       }
     }
 
-    if (auto* array = expr->As<ast::ArrayAccessorExpression>()) {
-      push_pair(array->array, array->index);
-    } else if (auto* bin_op = expr->As<ast::BinaryExpression>()) {
+    if (auto* idx = expr->As<IndexAccessorExpression>()) {
+      push_pair(idx->array, idx->index);
+    } else if (auto* bin_op = expr->As<BinaryExpression>()) {
       push_pair(bin_op->lhs, bin_op->rhs);
-    } else if (auto* bitcast = expr->As<ast::BitcastExpression>()) {
+    } else if (auto* bitcast = expr->As<BitcastExpression>()) {
       to_visit.push_back(bitcast->expr);
-    } else if (auto* call = expr->As<ast::CallExpression>()) {
+    } else if (auto* call = expr->As<CallExpression>()) {
       // TODO(crbug.com/tint/1257): Resolver breaks if we actually include the
       // function name in the traversal.
       // to_visit.push_back(call->func);
       push_list(call->args);
-    } else if (auto* type_ctor = expr->As<ast::TypeConstructorExpression>()) {
+    } else if (auto* type_ctor = expr->As<TypeConstructorExpression>()) {
       push_list(type_ctor->values);
-    } else if (auto* member = expr->As<ast::MemberAccessorExpression>()) {
+    } else if (auto* member = expr->As<MemberAccessorExpression>()) {
       // TODO(crbug.com/tint/1257): Resolver breaks if we actually include the
       // member name in the traversal.
       // push_pair(member->structure, member->member);
       to_visit.push_back(member->structure);
-    } else if (auto* unary = expr->As<ast::UnaryOpExpression>()) {
+    } else if (auto* unary = expr->As<UnaryOpExpression>()) {
       to_visit.push_back(unary->expr);
-    } else if (expr->IsAnyOf<ast::Literal, ast::IdentifierExpression,
-                             ast::PhonyExpression>()) {
+    } else if (expr->IsAnyOf<Literal, IdentifierExpression,
+                             PhonyExpression>()) {
       // Leaf expression
     } else {
       TINT_ICE(AST, diags) << "unhandled expression type: "
diff --git a/src/ast/traverse_expressions_test.cc b/src/ast/traverse_expressions_test.cc
index d1b2673..ecf9416 100644
--- a/src/ast/traverse_expressions_test.cc
+++ b/src/ast/traverse_expressions_test.cc
@@ -24,7 +24,7 @@
 
 using TraverseExpressionsTest = TestHelper;
 
-TEST_F(TraverseExpressionsTest, DescendArrayAccessorExpression) {
+TEST_F(TraverseExpressionsTest, DescendIndexAccessor) {
   std::vector<const ast::Expression*> e = {Expr(1), Expr(1), Expr(1), Expr(1)};
   std::vector<const ast::Expression*> i = {IndexAccessor(e[0], e[1]),
                                            IndexAccessor(e[2], e[3])};
diff --git a/src/program_builder.h b/src/program_builder.h
index 11f0276..97ef17f 100644
--- a/src/program_builder.h
+++ b/src/program_builder.h
@@ -21,7 +21,6 @@
 
 #include "src/ast/alias.h"
 #include "src/ast/array.h"
-#include "src/ast/array_accessor_expression.h"
 #include "src/ast/assignment_statement.h"
 #include "src/ast/atomic.h"
 #include "src/ast/binary_expression.h"
@@ -42,6 +41,7 @@
 #include "src/ast/for_loop_statement.h"
 #include "src/ast/i32.h"
 #include "src/ast/if_statement.h"
+#include "src/ast/index_accessor_expression.h"
 #include "src/ast/interpolate_decoration.h"
 #include "src/ast/invariant_decoration.h"
 #include "src/ast/loop_statement.h"
@@ -1740,21 +1740,21 @@
   /// @param source the source information
   /// @param arr the array argument for the array accessor expression
   /// @param idx the index argument for the array accessor expression
-  /// @returns a `ast::ArrayAccessorExpression` that indexes `arr` with `idx`
+  /// @returns a `ast::IndexAccessorExpression` that indexes `arr` with `idx`
   template <typename ARR, typename IDX>
-  const ast::ArrayAccessorExpression* IndexAccessor(const Source& source,
+  const ast::IndexAccessorExpression* IndexAccessor(const Source& source,
                                                     ARR&& arr,
                                                     IDX&& idx) {
-    return create<ast::ArrayAccessorExpression>(
+    return create<ast::IndexAccessorExpression>(
         source, Expr(std::forward<ARR>(arr)), Expr(std::forward<IDX>(idx)));
   }
 
   /// @param arr the array argument for the array accessor expression
   /// @param idx the index argument for the array accessor expression
-  /// @returns a `ast::ArrayAccessorExpression` that indexes `arr` with `idx`
+  /// @returns a `ast::IndexAccessorExpression` that indexes `arr` with `idx`
   template <typename ARR, typename IDX>
-  const ast::ArrayAccessorExpression* IndexAccessor(ARR&& arr, IDX&& idx) {
-    return create<ast::ArrayAccessorExpression>(Expr(std::forward<ARR>(arr)),
+  const ast::IndexAccessorExpression* IndexAccessor(ARR&& arr, IDX&& idx) {
+    return create<ast::IndexAccessorExpression>(Expr(std::forward<ARR>(arr)),
                                                 Expr(std::forward<IDX>(idx)));
   }
 
diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc
index 21e51ae..8c31667 100644
--- a/src/reader/spirv/function.cc
+++ b/src/reader/spirv/function.cc
@@ -3622,7 +3622,7 @@
           // The private variable is an array whose element type is already of
           // the same type as the value being stored into it.  Form the
           // reference into the first element.
-          lhs.expr = create<ast::ArrayAccessorExpression>(
+          lhs.expr = create<ast::IndexAccessorExpression>(
               Source{}, lhs.expr, parser_impl_.MakeNullValue(ty_.I32()));
           if (auto* ref = lhs.type->As<Reference>()) {
             lhs.type = ref->type;
@@ -3672,7 +3672,7 @@
               Source{}, builder_.Symbols().Register(name));
           // SampleMask is an array in Vulkan SPIR-V. Always access the first
           // element.
-          id_expr = create<ast::ArrayAccessorExpression>(
+          id_expr = create<ast::IndexAccessorExpression>(
               Source{}, id_expr, parser_impl_.MakeNullValue(ty_.I32()));
 
           auto* loaded_type = parser_impl_.ConvertType(inst.type_id());
@@ -3972,7 +3972,7 @@
   }
 
   if (opcode == SpvOpVectorExtractDynamic) {
-    return {ast_type, create<ast::ArrayAccessorExpression>(
+    return {ast_type, create<ast::IndexAccessorExpression>(
                           Source{}, MakeOperand(inst, 0).expr,
                           MakeOperand(inst, 1).expr)};
   }
@@ -4362,7 +4362,7 @@
               Source{}, current_expr.expr, Swizzle(uint32_t(index_const_val)));
         } else {
           // Non-constant index. Use array syntax
-          next_expr = create<ast::ArrayAccessorExpression>(
+          next_expr = create<ast::IndexAccessorExpression>(
               Source{}, current_expr.expr, MakeOperand(inst, index).expr);
         }
         // All vector components are the same type.
@@ -4372,18 +4372,18 @@
         break;
       case SpvOpTypeMatrix:
         // Use array syntax.
-        next_expr = create<ast::ArrayAccessorExpression>(
+        next_expr = create<ast::IndexAccessorExpression>(
             Source{}, current_expr.expr, MakeOperand(inst, index).expr);
         // All matrix components are the same type.
         pointee_type_id = pointee_type_inst->GetSingleWordInOperand(0);
         break;
       case SpvOpTypeArray:
-        next_expr = create<ast::ArrayAccessorExpression>(
+        next_expr = create<ast::IndexAccessorExpression>(
             Source{}, current_expr.expr, MakeOperand(inst, index).expr);
         pointee_type_id = pointee_type_inst->GetSingleWordInOperand(0);
         break;
       case SpvOpTypeRuntimeArray:
-        next_expr = create<ast::ArrayAccessorExpression>(
+        next_expr = create<ast::IndexAccessorExpression>(
             Source{}, current_expr.expr, MakeOperand(inst, index).expr);
         pointee_type_id = pointee_type_inst->GetSingleWordInOperand(0);
         break;
@@ -4543,7 +4543,7 @@
                  << " is too big. Max handled index is " << kMaxVectorLen - 1;
         }
         // Use array syntax.
-        next_expr = create<ast::ArrayAccessorExpression>(
+        next_expr = create<ast::IndexAccessorExpression>(
             Source{}, current_expr.expr, make_index(index_val));
         // All matrix components are the same type.
         current_type_id = current_type_inst->GetSingleWordInOperand(0);
@@ -4553,7 +4553,7 @@
         // The array size could be a spec constant, and so it's not always
         // statically checkable.  Instead, rely on a runtime index clamp
         // or runtime check to keep this safe.
-        next_expr = create<ast::ArrayAccessorExpression>(
+        next_expr = create<ast::IndexAccessorExpression>(
             Source{}, current_expr.expr, make_index(index_val));
         current_type_id = current_type_inst->GetSingleWordInOperand(0);
         break;
@@ -5946,7 +5946,7 @@
     AddStatement(builder_.Decl({}, temp_var));
   }
 
-  auto* lhs = create<ast::ArrayAccessorExpression>(
+  auto* lhs = create<ast::IndexAccessorExpression>(
       Source{}, builder_.Expr(var_name), index.expr);
   if (!lhs) {
     return false;
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index 6ad62fd..0ace622 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -603,7 +603,7 @@
   if (where == inst_source_.end()) {
     return {};
   }
-  return Source{where->second};
+  return Source{where->second };
 }
 
 bool ParserImpl::ParseInternalModuleExceptFunctions() {
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index 8e904bf..f818f27 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -2270,7 +2270,7 @@
               return Failure::kErrored;
             }
 
-            return create<ast::ArrayAccessorExpression>(source, prefix,
+            return create<ast::IndexAccessorExpression>(source, prefix,
                                                         param.value);
           });
 
diff --git a/src/reader/wgsl/parser_impl_assignment_stmt_test.cc b/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
index 38cdc7c..251b504 100644
--- a/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
@@ -63,8 +63,8 @@
   auto* ident = mem->member->As<ast::IdentifierExpression>();
   EXPECT_EQ(ident->symbol, p->builder().Symbols().Get("d"));
 
-  ASSERT_TRUE(mem->structure->Is<ast::ArrayAccessorExpression>());
-  auto* ary = mem->structure->As<ast::ArrayAccessorExpression>();
+  ASSERT_TRUE(mem->structure->Is<ast::IndexAccessorExpression>());
+  auto* ary = mem->structure->As<ast::IndexAccessorExpression>();
 
   ASSERT_NE(ary->index, nullptr);
   ASSERT_TRUE(ary->index->Is<ast::SintLiteral>());
diff --git a/src/reader/wgsl/parser_impl_singular_expression_test.cc b/src/reader/wgsl/parser_impl_singular_expression_test.cc
index 10c0e13..02bffc3 100644
--- a/src/reader/wgsl/parser_impl_singular_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_singular_expression_test.cc
@@ -27,8 +27,8 @@
   EXPECT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e.value, nullptr);
 
-  ASSERT_TRUE(e->Is<ast::ArrayAccessorExpression>());
-  auto* ary = e->As<ast::ArrayAccessorExpression>();
+  ASSERT_TRUE(e->Is<ast::IndexAccessorExpression>());
+  auto* ary = e->As<ast::IndexAccessorExpression>();
 
   ASSERT_TRUE(ary->array->Is<ast::IdentifierExpression>());
   auto* ident = ary->array->As<ast::IdentifierExpression>();
@@ -46,8 +46,8 @@
   EXPECT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e.value, nullptr);
 
-  ASSERT_TRUE(e->Is<ast::ArrayAccessorExpression>());
-  auto* ary = e->As<ast::ArrayAccessorExpression>();
+  ASSERT_TRUE(e->Is<ast::IndexAccessorExpression>());
+  auto* ary = e->As<ast::IndexAccessorExpression>();
 
   ASSERT_TRUE(ary->array->Is<ast::IdentifierExpression>());
   auto* ident = ary->array->As<ast::IdentifierExpression>();
@@ -202,7 +202,7 @@
   ASSERT_TRUE(e->Is<ast::IdentifierExpression>());
 }
 
-TEST_F(ParserImplTest, SingularExpression_Array_NestedArrayAccessor) {
+TEST_F(ParserImplTest, SingularExpression_Array_NestedIndexAccessor) {
   auto p = parser("a[b[c]]");
   auto e = p->singular_expression();
   EXPECT_TRUE(e.matched);
@@ -210,7 +210,7 @@
   EXPECT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e.value, nullptr);
 
-  const auto* outer_accessor = e->As<ast::ArrayAccessorExpression>();
+  const auto* outer_accessor = e->As<ast::IndexAccessorExpression>();
   ASSERT_TRUE(outer_accessor);
 
   const auto* outer_array =
@@ -219,7 +219,7 @@
   EXPECT_EQ(outer_array->symbol, p->builder().Symbols().Get("a"));
 
   const auto* inner_accessor =
-      outer_accessor->index->As<ast::ArrayAccessorExpression>();
+      outer_accessor->index->As<ast::IndexAccessorExpression>();
   ASSERT_TRUE(inner_accessor);
 
   const auto* inner_array =
diff --git a/src/reader/wgsl/parser_impl_unary_expression_test.cc b/src/reader/wgsl/parser_impl_unary_expression_test.cc
index 177a97a..43132fd 100644
--- a/src/reader/wgsl/parser_impl_unary_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_unary_expression_test.cc
@@ -28,8 +28,8 @@
   EXPECT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e.value, nullptr);
 
-  ASSERT_TRUE(e->Is<ast::ArrayAccessorExpression>());
-  auto* ary = e->As<ast::ArrayAccessorExpression>();
+  ASSERT_TRUE(e->Is<ast::IndexAccessorExpression>());
+  auto* ary = e->As<ast::IndexAccessorExpression>();
   ASSERT_TRUE(ary->array->Is<ast::IdentifierExpression>());
   auto* ident = ary->array->As<ast::IdentifierExpression>();
   EXPECT_EQ(ident->symbol, p->builder().Symbols().Get("a"));
diff --git a/src/resolver/array_accessor_test.cc b/src/resolver/array_accessor_test.cc
index 728c119..9edd685 100644
--- a/src/resolver/array_accessor_test.cc
+++ b/src/resolver/array_accessor_test.cc
@@ -22,9 +22,9 @@
 namespace resolver {
 namespace {
 
-using ResolverArrayAccessorTest = ResolverTest;
+using ResolverIndexAccessorTest = ResolverTest;
 
-TEST_F(ResolverArrayAccessorTest, Matrix_Dynamic_F32) {
+TEST_F(ResolverIndexAccessorTest, Matrix_Dynamic_F32) {
   Global("my_var", ty.mat2x3<f32>(), ast::StorageClass::kPrivate);
   auto* acc = IndexAccessor("my_var", Expr(Source{{12, 34}}, 1.0f));
   WrapInFunction(acc);
@@ -34,7 +34,7 @@
             "12:34 error: index must be of type 'i32' or 'u32', found: 'f32'");
 }
 
-TEST_F(ResolverArrayAccessorTest, Matrix_Dynamic_Ref) {
+TEST_F(ResolverIndexAccessorTest, Matrix_Dynamic_Ref) {
   Global("my_var", ty.mat2x3<f32>(), ast::StorageClass::kPrivate);
   auto* idx = Var("idx", ty.i32(), Construct(ty.i32()));
   auto* acc = IndexAccessor("my_var", idx);
@@ -43,7 +43,7 @@
   EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
-TEST_F(ResolverArrayAccessorTest, Matrix_BothDimensions_Dynamic_Ref) {
+TEST_F(ResolverIndexAccessorTest, Matrix_BothDimensions_Dynamic_Ref) {
   Global("my_var", ty.mat4x4<f32>(), ast::StorageClass::kPrivate);
   auto* idx = Var("idx", ty.u32(), Expr(3u));
   auto* idy = Var("idy", ty.u32(), Expr(2u));
@@ -53,7 +53,7 @@
   EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
-TEST_F(ResolverArrayAccessorTest, Matrix_Dynamic) {
+TEST_F(ResolverIndexAccessorTest, Matrix_Dynamic) {
   GlobalConst("my_const", ty.mat2x3<f32>(), Construct(ty.mat2x3<f32>()));
   auto* idx = Var("idx", ty.i32(), Construct(ty.i32()));
   auto* acc = IndexAccessor("my_const", Expr(Source{{12, 34}}, idx));
@@ -64,7 +64,7 @@
             "12:34 error: index must be signed or unsigned integer literal");
 }
 
-TEST_F(ResolverArrayAccessorTest, Matrix_XDimension_Dynamic) {
+TEST_F(ResolverIndexAccessorTest, Matrix_XDimension_Dynamic) {
   GlobalConst("my_var", ty.mat4x4<f32>(), Construct(ty.mat4x4<f32>()));
   auto* idx = Var("idx", ty.u32(), Expr(3u));
   auto* acc = IndexAccessor("my_var", Expr(Source{{12, 34}}, idx));
@@ -75,7 +75,7 @@
             "12:34 error: index must be signed or unsigned integer literal");
 }
 
-TEST_F(ResolverArrayAccessorTest, Matrix_BothDimension_Dynamic) {
+TEST_F(ResolverIndexAccessorTest, Matrix_BothDimension_Dynamic) {
   GlobalConst("my_var", ty.mat4x4<f32>(), Construct(ty.mat4x4<f32>()));
   auto* idx = Var("idy", ty.u32(), Expr(2u));
   auto* acc =
@@ -87,7 +87,7 @@
             "12:34 error: index must be signed or unsigned integer literal");
 }
 
-TEST_F(ResolverArrayAccessorTest, Matrix) {
+TEST_F(ResolverIndexAccessorTest, Matrix) {
   Global("my_var", ty.mat2x3<f32>(), ast::StorageClass::kPrivate);
 
   auto* acc = IndexAccessor("my_var", 2);
@@ -103,7 +103,7 @@
   EXPECT_EQ(ref->StoreType()->As<sem::Vector>()->Width(), 3u);
 }
 
-TEST_F(ResolverArrayAccessorTest, Matrix_BothDimensions) {
+TEST_F(ResolverIndexAccessorTest, Matrix_BothDimensions) {
   Global("my_var", ty.mat2x3<f32>(), ast::StorageClass::kPrivate);
 
   auto* acc = IndexAccessor(IndexAccessor("my_var", 2), 1);
@@ -118,7 +118,7 @@
   EXPECT_TRUE(ref->StoreType()->Is<sem::F32>());
 }
 
-TEST_F(ResolverArrayAccessorTest, Vector_F32) {
+TEST_F(ResolverIndexAccessorTest, Vector_F32) {
   Global("my_var", ty.vec3<f32>(), ast::StorageClass::kPrivate);
   auto* acc = IndexAccessor("my_var", Expr(Source{{12, 34}}, 2.0f));
   WrapInFunction(acc);
@@ -128,7 +128,7 @@
             "12:34 error: index must be of type 'i32' or 'u32', found: 'f32'");
 }
 
-TEST_F(ResolverArrayAccessorTest, Vector_Dynamic_Ref) {
+TEST_F(ResolverIndexAccessorTest, Vector_Dynamic_Ref) {
   Global("my_var", ty.vec3<f32>(), ast::StorageClass::kPrivate);
   auto* idx = Var("idx", ty.i32(), Expr(2));
   auto* acc = IndexAccessor("my_var", idx);
@@ -137,7 +137,7 @@
   EXPECT_TRUE(r()->Resolve());
 }
 
-TEST_F(ResolverArrayAccessorTest, Vector_Dynamic) {
+TEST_F(ResolverIndexAccessorTest, Vector_Dynamic) {
   GlobalConst("my_var", ty.vec3<f32>(), Construct(ty.vec3<f32>()));
   auto* idx = Var("idx", ty.i32(), Expr(2));
   auto* acc = IndexAccessor("my_var", Expr(Source{{12, 34}}, idx));
@@ -146,7 +146,7 @@
   EXPECT_TRUE(r()->Resolve());
 }
 
-TEST_F(ResolverArrayAccessorTest, Vector) {
+TEST_F(ResolverIndexAccessorTest, Vector) {
   Global("my_var", ty.vec3<f32>(), ast::StorageClass::kPrivate);
 
   auto* acc = IndexAccessor("my_var", 2);
@@ -161,7 +161,7 @@
   EXPECT_TRUE(ref->StoreType()->Is<sem::F32>());
 }
 
-TEST_F(ResolverArrayAccessorTest, Array) {
+TEST_F(ResolverIndexAccessorTest, Array) {
   auto* idx = Expr(2);
   Global("my_var", ty.array<f32, 3>(), ast::StorageClass::kPrivate);
 
@@ -177,7 +177,7 @@
   EXPECT_TRUE(ref->StoreType()->Is<sem::F32>());
 }
 
-TEST_F(ResolverArrayAccessorTest, Alias_Array) {
+TEST_F(ResolverIndexAccessorTest, Alias_Array) {
   auto* aary = Alias("myarrty", ty.array<f32, 3>());
 
   Global("my_var", ty.Of(aary), ast::StorageClass::kPrivate);
@@ -194,7 +194,7 @@
   EXPECT_TRUE(ref->StoreType()->Is<sem::F32>());
 }
 
-TEST_F(ResolverArrayAccessorTest, Array_Constant) {
+TEST_F(ResolverIndexAccessorTest, Array_Constant) {
   GlobalConst("my_var", ty.array<f32, 3>(), array<f32, 3>());
 
   auto* acc = IndexAccessor("my_var", 2);
@@ -206,7 +206,7 @@
   EXPECT_TRUE(TypeOf(acc)->Is<sem::F32>()) << TypeOf(acc)->type_name();
 }
 
-TEST_F(ResolverArrayAccessorTest, Array_Dynamic_I32) {
+TEST_F(ResolverIndexAccessorTest, Array_Dynamic_I32) {
   // let a : array<f32, 3> = 0;
   // var idx : i32 = 0;
   // var f : f32 = a[idx];
@@ -226,7 +226,7 @@
             "12:34 error: index must be signed or unsigned integer literal");
 }
 
-TEST_F(ResolverArrayAccessorTest, Array_Literal_F32) {
+TEST_F(ResolverIndexAccessorTest, Array_Literal_F32) {
   // let a : array<f32, 3>;
   // var f : f32 = a[2.0f];
   auto* a = Const("a", ty.array<f32, 3>(), array<f32, 3>());
@@ -243,7 +243,7 @@
             "12:34 error: index must be of type 'i32' or 'u32', found: 'f32'");
 }
 
-TEST_F(ResolverArrayAccessorTest, Array_Literal_I32) {
+TEST_F(ResolverIndexAccessorTest, Array_Literal_I32) {
   // let a : array<f32, 3>;
   // var f : f32 = a[2];
   auto* a = Const("a", ty.array<f32, 3>(), array<f32, 3>());
@@ -257,7 +257,7 @@
   EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
-TEST_F(ResolverArrayAccessorTest, EXpr_Deref_FuncGoodParent) {
+TEST_F(ResolverIndexAccessorTest, EXpr_Deref_FuncGoodParent) {
   // fn func(p: ptr<function, vec4<f32>>) -> f32 {
   //     let idx: u32 = u32();
   //     let x: f32 = (*p)[idx];
@@ -274,7 +274,7 @@
   EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
-TEST_F(ResolverArrayAccessorTest, EXpr_Deref_FuncBadParent) {
+TEST_F(ResolverIndexAccessorTest, EXpr_Deref_FuncBadParent) {
   // fn func(p: ptr<function, vec4<f32>>) -> f32 {
   //     let idx: u32 = u32();
   //     let x: f32 = *p[idx];
@@ -294,7 +294,7 @@
       "12:34 error: cannot index type 'ptr<function, vec4<f32>, read_write>'");
 }
 
-TEST_F(ResolverArrayAccessorTest, Exr_Deref_BadParent) {
+TEST_F(ResolverIndexAccessorTest, Exr_Deref_BadParent) {
   // var param: vec4<f32>
   // let x: f32 = *(&param)[0];
   auto* param = Var("param", ty.vec4<f32>());
diff --git a/src/resolver/entry_point_validation_test.cc b/src/resolver/entry_point_validation_test.cc
index 0ac3b81..0fc620b 100644
--- a/src/resolver/entry_point_validation_test.cc
+++ b/src/resolver/entry_point_validation_test.cc
@@ -166,7 +166,6 @@
 12:34 note: while analysing entry point 'main')");
 }
 
-
 TEST_F(ResolverEntryPointValidationTest, ReturnType_Struct_DuplicateBuiltins) {
   // struct Output {
   //   [[builtin(frag_depth)]] a : f32;
@@ -354,20 +353,20 @@
 using TypeValidationTest = resolver::ResolverTestWithParam<Params>;
 
 static constexpr Params cases[] = {
-    ParamsFor<f32>(true),            //
-    ParamsFor<i32>(true),            //
-    ParamsFor<u32>(true),            //
-    ParamsFor<bool>(false),          //
-    ParamsFor<vec2<f32>>(true),      //
-    ParamsFor<vec3<f32>>(true),      //
-    ParamsFor<vec4<f32>>(true),      //
-    ParamsFor<mat2x2<f32>>(false),   //
-    ParamsFor<mat3x3<f32>>(false),   //
-    ParamsFor<mat4x4<f32>>(false),   //
-    ParamsFor<alias<f32>>(true),     //
-    ParamsFor<alias<i32>>(true),     //
-    ParamsFor<alias<u32>>(true),     //
-    ParamsFor<alias<bool>>(false),   //
+    ParamsFor<f32>(true),           //
+    ParamsFor<i32>(true),           //
+    ParamsFor<u32>(true),           //
+    ParamsFor<bool>(false),         //
+    ParamsFor<vec2<f32>>(true),     //
+    ParamsFor<vec3<f32>>(true),     //
+    ParamsFor<vec4<f32>>(true),     //
+    ParamsFor<mat2x2<f32>>(false),  //
+    ParamsFor<mat3x3<f32>>(false),  //
+    ParamsFor<mat4x4<f32>>(false),  //
+    ParamsFor<alias<f32>>(true),    //
+    ParamsFor<alias<i32>>(true),    //
+    ParamsFor<alias<u32>>(true),    //
+    ParamsFor<alias<bool>>(false),  //
 };
 
 TEST_P(TypeValidationTest, BareInputs) {
diff --git a/src/resolver/ptr_ref_validation_test.cc b/src/resolver/ptr_ref_validation_test.cc
index 87886bb..57aea32 100644
--- a/src/resolver/ptr_ref_validation_test.cc
+++ b/src/resolver/ptr_ref_validation_test.cc
@@ -80,7 +80,7 @@
             "12:34 error: cannot take the address of a vector component");
 }
 
-TEST_F(ResolverPtrRefValidationTest, AddressOfVectorComponent_ArrayAccessor) {
+TEST_F(ResolverPtrRefValidationTest, AddressOfVectorComponent_IndexAccessor) {
   // var v : vec4<i32>;
   // &v[2]
   auto* v = Var("v", ty.vec4<i32>());
diff --git a/src/resolver/resolver.cc b/src/resolver/resolver.cc
index 9dea45f..6943354 100644
--- a/src/resolver/resolver.cc
+++ b/src/resolver/resolver.cc
@@ -2354,8 +2354,8 @@
 
   for (auto* expr : utils::Reverse(sorted)) {
     sem::Expression* sem_expr = nullptr;
-    if (auto* array = expr->As<ast::ArrayAccessorExpression>()) {
-      sem_expr = ArrayAccessor(array);
+    if (auto* array = expr->As<ast::IndexAccessorExpression>()) {
+      sem_expr = IndexAccessor(array);
     } else if (auto* bin_op = expr->As<ast::BinaryExpression>()) {
       sem_expr = Binary(bin_op);
     } else if (auto* bitcast = expr->As<ast::BitcastExpression>()) {
@@ -2394,8 +2394,8 @@
   return nullptr;
 }
 
-sem::Expression* Resolver::ArrayAccessor(
-    const ast::ArrayAccessorExpression* expr) {
+sem::Expression* Resolver::IndexAccessor(
+    const ast::IndexAccessorExpression* expr) {
   auto* idx = expr->index;
   auto* parent_raw_ty = TypeOf(expr->array);
   auto* parent_ty = parent_raw_ty->UnwrapRef();
@@ -3455,7 +3455,7 @@
           return nullptr;
         }
 
-        auto* array = unary->expr->As<ast::ArrayAccessorExpression>();
+        auto* array = unary->expr->As<ast::IndexAccessorExpression>();
         auto* member = unary->expr->As<ast::MemberAccessorExpression>();
         if ((array && TypeOf(array->array)->UnwrapRef()->Is<sem::Vector>()) ||
             (member &&
diff --git a/src/resolver/resolver.h b/src/resolver/resolver.h
index b75532e..c19dfee 100644
--- a/src/resolver/resolver.h
+++ b/src/resolver/resolver.h
@@ -37,7 +37,7 @@
 
 // Forward declarations
 namespace ast {
-class ArrayAccessorExpression;
+class IndexAccessorExpression;
 class BinaryExpression;
 class BitcastExpression;
 class CallExpression;
@@ -167,7 +167,7 @@
 
   // Expression resolving methods
   // Returns the semantic node pointer on success, nullptr on failure.
-  sem::Expression* ArrayAccessor(const ast::ArrayAccessorExpression*);
+  sem::Expression* IndexAccessor(const ast::IndexAccessorExpression*);
   sem::Expression* Binary(const ast::BinaryExpression*);
   sem::Expression* Bitcast(const ast::BitcastExpression*);
   sem::Expression* Call(const ast::CallExpression*);
diff --git a/src/resolver/resolver_test.cc b/src/resolver/resolver_test.cc
index cf1a91f..45afc80 100644
--- a/src/resolver/resolver_test.cc
+++ b/src/resolver/resolver_test.cc
@@ -667,7 +667,7 @@
   EXPECT_EQ(VarOf(my_var_a)->Declaration(), var);
 }
 
-TEST_F(ResolverTest, ArrayAccessor_Dynamic_Ref_F32) {
+TEST_F(ResolverTest, IndexAccessor_Dynamic_Ref_F32) {
   // var a : array<bool, 10> = 0;
   // var idx : f32 = f32();
   // var f : f32 = a[idx];
diff --git a/src/sem/variable.cc b/src/sem/variable.cc
index 5eac5b8..dd242be 100644
--- a/src/sem/variable.cc
+++ b/src/sem/variable.cc
@@ -64,7 +64,6 @@
       binding_point_(binding_point),
       is_pipeline_constant_(false) {}
 
-
 GlobalVariable::~GlobalVariable() = default;
 
 Parameter::Parameter(const ast::Variable* declaration,
diff --git a/src/transform/decompose_memory_access.cc b/src/transform/decompose_memory_access.cc
index 32ff132..8069489 100644
--- a/src/transform/decompose_memory_access.cc
+++ b/src/transform/decompose_memory_access.cc
@@ -851,7 +851,7 @@
       continue;
     }
 
-    if (auto* accessor = node->As<ast::ArrayAccessorExpression>()) {
+    if (auto* accessor = node->As<ast::IndexAccessorExpression>()) {
       if (auto access = state.TakeAccess(accessor->array)) {
         // X[Y]
         if (auto* arr = access.type->As<sem::Array>()) {
diff --git a/src/transform/decompose_strided_matrix.cc b/src/transform/decompose_strided_matrix.cc
index 2d21a5b..3142b25 100644
--- a/src/transform/decompose_strided_matrix.cc
+++ b/src/transform/decompose_strided_matrix.cc
@@ -144,8 +144,8 @@
   // preserve these without calling conversion functions.
   // Example:
   //   ssbo.mat[2] -> ssbo.mat[2]
-  ctx.ReplaceAll([&](const ast::ArrayAccessorExpression* expr)
-                     -> const ast::ArrayAccessorExpression* {
+  ctx.ReplaceAll([&](const ast::IndexAccessorExpression* expr)
+                     -> const ast::IndexAccessorExpression* {
     if (auto* access =
             ctx.src->Sem().Get<sem::StructMemberAccess>(expr->array)) {
       auto it = decomposed.find(access->Member()->Declaration());
diff --git a/src/transform/inline_pointer_lets.cc b/src/transform/inline_pointer_lets.cc
index ea61615..aa97b92 100644
--- a/src/transform/inline_pointer_lets.cc
+++ b/src/transform/inline_pointer_lets.cc
@@ -43,7 +43,7 @@
 void CollectSavedArrayIndices(const Program* program,
                               const ast::Expression* expr,
                               F&& cb) {
-  if (auto* a = expr->As<ast::ArrayAccessorExpression>()) {
+  if (auto* a = expr->As<ast::IndexAccessorExpression>()) {
     CollectSavedArrayIndices(program, a->array, cb);
 
     if (!a->index->Is<ast::Literal>()) {
diff --git a/src/transform/pad_array_elements.cc b/src/transform/pad_array_elements.cc
index 58f6836..254ae6d 100644
--- a/src/transform/pad_array_elements.cc
+++ b/src/transform/pad_array_elements.cc
@@ -115,7 +115,7 @@
   });
 
   // Fix up array accessors so `a[1]` becomes `a[1].el`
-  ctx.ReplaceAll([&](const ast::ArrayAccessorExpression* accessor)
+  ctx.ReplaceAll([&](const ast::IndexAccessorExpression* accessor)
                      -> const ast::Expression* {
     if (auto* array = tint::As<sem::Array>(
             sem.Get(accessor->array)->Type()->UnwrapRef())) {
diff --git a/src/transform/renamer_test.cc b/src/transform/renamer_test.cc
index 457f59e..d32c9f3 100644
--- a/src/transform/renamer_test.cc
+++ b/src/transform/renamer_test.cc
@@ -1300,7 +1300,7 @@
         "long2",
         "long3",
         "long4",
-        "main",   // No functions called main
+        "main",  // No functions called main
         "matrix",
         "metal",  // The namespace
         "packed_bool2",
diff --git a/src/transform/robustness.cc b/src/transform/robustness.cc
index b4465a3..4578e34 100644
--- a/src/transform/robustness.cc
+++ b/src/transform/robustness.cc
@@ -41,7 +41,7 @@
 
   /// Applies the transformation state to `ctx`.
   void Transform() {
-    ctx.ReplaceAll([&](const ast::ArrayAccessorExpression* expr) {
+    ctx.ReplaceAll([&](const ast::IndexAccessorExpression* expr) {
       return Transform(expr);
     });
     ctx.ReplaceAll(
@@ -52,8 +52,8 @@
   /// @param expr the array, vector or matrix index expression
   /// @return the clamped replacement expression, or nullptr if `expr` should be
   /// cloned without changes.
-  const ast::ArrayAccessorExpression* Transform(
-      const ast::ArrayAccessorExpression* expr) {
+  const ast::IndexAccessorExpression* Transform(
+      const ast::IndexAccessorExpression* expr) {
     auto* ret_type = ctx.src->Sem().Get(expr->array)->Type();
 
     auto* ref = ret_type->As<sem::Reference>();
diff --git a/src/transform/robustness.h b/src/transform/robustness.h
index 1333e5c..0447340 100644
--- a/src/transform/robustness.h
+++ b/src/transform/robustness.h
@@ -22,7 +22,7 @@
 // Forward declarations
 namespace tint {
 namespace ast {
-class ArrayAccessorExpression;
+class IndexAccessorExpression;
 class CallExpression;
 }  // namespace ast
 }  // namespace tint
diff --git a/src/transform/wrap_arrays_in_structs.cc b/src/transform/wrap_arrays_in_structs.cc
index 782004f..181c737 100644
--- a/src/transform/wrap_arrays_in_structs.cc
+++ b/src/transform/wrap_arrays_in_structs.cc
@@ -57,8 +57,8 @@
   });
 
   // Fix up array accessors so `a[1]` becomes `a.arr[1]`
-  ctx.ReplaceAll([&](const ast::ArrayAccessorExpression* accessor)
-                     -> const ast::ArrayAccessorExpression* {
+  ctx.ReplaceAll([&](const ast::IndexAccessorExpression* accessor)
+                     -> const ast::IndexAccessorExpression* {
     if (auto* array = ::tint::As<sem::Array>(
             sem.Get(accessor->array)->Type()->UnwrapRef())) {
       if (wrapper(array)) {
diff --git a/src/utils/unique_vector.h b/src/utils/unique_vector.h
index 8d92bea..c0a8e3f 100644
--- a/src/utils/unique_vector.h
+++ b/src/utils/unique_vector.h
@@ -72,7 +72,7 @@
   ConstIterator end() const { return vector.end(); }
 
   /// @returns a const reference to the internal vector
-  operator const std::vector<T> &() const { return vector; }
+  operator const std::vector<T>&() const { return vector; }
 
  private:
   std::vector<T> vector;
diff --git a/src/writer/float_to_string.cc b/src/writer/float_to_string.cc
index 900599d..d140b34 100644
--- a/src/writer/float_to_string.cc
+++ b/src/writer/float_to_string.cc
@@ -16,10 +16,10 @@
 
 #include <cmath>
 #include <cstring>
+#include <functional>
 #include <iomanip>
 #include <limits>
 #include <sstream>
-#include <functional>
 
 #include "src/debug.h"
 
diff --git a/src/writer/glsl/generator_impl.cc b/src/writer/glsl/generator_impl.cc
index 16cbf30..1d0213a 100644
--- a/src/writer/glsl/generator_impl.cc
+++ b/src/writer/glsl/generator_impl.cc
@@ -164,9 +164,9 @@
   return true;
 }
 
-bool GeneratorImpl::EmitArrayAccessor(
+bool GeneratorImpl::EmitIndexAccessor(
     std::ostream& out,
-    const ast::ArrayAccessorExpression* expr) {
+    const ast::IndexAccessorExpression* expr) {
   if (!EmitExpression(out, expr->array)) {
     return false;
   }
@@ -1459,8 +1459,8 @@
 
 bool GeneratorImpl::EmitExpression(std::ostream& out,
                                    const ast::Expression* expr) {
-  if (auto* a = expr->As<ast::ArrayAccessorExpression>()) {
-    return EmitArrayAccessor(out, a);
+  if (auto* a = expr->As<ast::IndexAccessorExpression>()) {
+    return EmitIndexAccessor(out, a);
   }
   if (auto* b = expr->As<ast::BinaryExpression>()) {
     return EmitBinary(out, b);
diff --git a/src/writer/glsl/generator_impl.h b/src/writer/glsl/generator_impl.h
index 9258cae..c478d3b 100644
--- a/src/writer/glsl/generator_impl.h
+++ b/src/writer/glsl/generator_impl.h
@@ -63,8 +63,8 @@
   /// @param out the output of the expression stream
   /// @param expr the expression to emit
   /// @returns true if the array accessor was emitted
-  bool EmitArrayAccessor(std::ostream& out,
-                         const ast::ArrayAccessorExpression* expr);
+  bool EmitIndexAccessor(std::ostream& out,
+                         const ast::IndexAccessorExpression* expr);
   /// Handles an assignment statement
   /// @param stmt the statement to emit
   /// @returns true if the statement was emitted successfully
diff --git a/src/writer/glsl/generator_impl_array_accessor_test.cc b/src/writer/glsl/generator_impl_array_accessor_test.cc
index 1ba07b6..7460f76 100644
--- a/src/writer/glsl/generator_impl_array_accessor_test.cc
+++ b/src/writer/glsl/generator_impl_array_accessor_test.cc
@@ -21,7 +21,7 @@
 
 using GlslGeneratorImplTest_Expression = TestHelper;
 
-TEST_F(GlslGeneratorImplTest_Expression, ArrayAccessor) {
+TEST_F(GlslGeneratorImplTest_Expression, IndexAccessor) {
   Global("ary", ty.array<i32, 10>(), ast::StorageClass::kPrivate);
   auto* expr = IndexAccessor("ary", 5);
   WrapInFunction(expr);
diff --git a/src/writer/glsl/generator_impl_member_accessor_test.cc b/src/writer/glsl/generator_impl_member_accessor_test.cc
index cf5b9b7..d1df07a 100644
--- a/src/writer/glsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/glsl/generator_impl_member_accessor_test.cc
@@ -362,7 +362,7 @@
 }
 
 TEST_F(GlslGeneratorImplTest_MemberAccessor,
-       EmitExpression_ArrayAccessor_StorageBuffer_Load_Int_FromArray) {
+       EmitExpression_IndexAccessor_StorageBuffer_Load_Int_FromArray) {
   // struct Data {
   //   a : [[stride(4)]] array<i32, 5>;
   // };
@@ -406,7 +406,7 @@
 }
 
 TEST_F(GlslGeneratorImplTest_MemberAccessor,
-       EmitExpression_ArrayAccessor_StorageBuffer_Load_Int_FromArray_ExprIdx) {
+       EmitExpression_IndexAccessor_StorageBuffer_Load_Int_FromArray_ExprIdx) {
   // struct Data {
   //   a : [[stride(4)]] array<i32, 5>;
   // };
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index f01ce15..8a2d114 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -291,7 +291,7 @@
     return false;
   }
 
-  auto* ast_access_expr = stmt->lhs->As<ast::ArrayAccessorExpression>();
+  auto* ast_access_expr = stmt->lhs->As<ast::IndexAccessorExpression>();
 
   auto out = line();
   out << name << "(";
@@ -311,9 +311,9 @@
   return true;
 }
 
-bool GeneratorImpl::EmitArrayAccessor(
+bool GeneratorImpl::EmitIndexAccessor(
     std::ostream& out,
-    const ast::ArrayAccessorExpression* expr) {
+    const ast::IndexAccessorExpression* expr) {
   if (!EmitExpression(out, expr->array)) {
     return false;
   }
@@ -354,7 +354,7 @@
 }
 
 bool GeneratorImpl::EmitAssign(const ast::AssignmentStatement* stmt) {
-  if (auto* idx = stmt->lhs->As<ast::ArrayAccessorExpression>()) {
+  if (auto* idx = stmt->lhs->As<ast::IndexAccessorExpression>()) {
     if (auto* vec = TypeOf(idx->array)->UnwrapRef()->As<sem::Vector>()) {
       auto* rhs_sem = builder_.Sem().Get(idx->index);
       if (!rhs_sem->ConstantValue().IsValid()) {
@@ -2191,8 +2191,8 @@
 
 bool GeneratorImpl::EmitExpression(std::ostream& out,
                                    const ast::Expression* expr) {
-  if (auto* a = expr->As<ast::ArrayAccessorExpression>()) {
-    return EmitArrayAccessor(out, a);
+  if (auto* a = expr->As<ast::IndexAccessorExpression>()) {
+    return EmitIndexAccessor(out, a);
   }
   if (auto* b = expr->As<ast::BinaryExpression>()) {
     return EmitBinary(out, b);
diff --git a/src/writer/hlsl/generator_impl.h b/src/writer/hlsl/generator_impl.h
index 67a4da5..1aadf4a 100644
--- a/src/writer/hlsl/generator_impl.h
+++ b/src/writer/hlsl/generator_impl.h
@@ -79,8 +79,8 @@
   /// @param out the output of the expression stream
   /// @param expr the expression to emit
   /// @returns true if the array accessor was emitted
-  bool EmitArrayAccessor(std::ostream& out,
-                         const ast::ArrayAccessorExpression* expr);
+  bool EmitIndexAccessor(std::ostream& out,
+                         const ast::IndexAccessorExpression* expr);
   /// Handles an assignment statement
   /// @param stmt the statement to emit
   /// @returns true if the statement was emitted successfully
diff --git a/src/writer/hlsl/generator_impl_array_accessor_test.cc b/src/writer/hlsl/generator_impl_array_accessor_test.cc
index b2fb021..00c75e4 100644
--- a/src/writer/hlsl/generator_impl_array_accessor_test.cc
+++ b/src/writer/hlsl/generator_impl_array_accessor_test.cc
@@ -21,7 +21,7 @@
 
 using HlslGeneratorImplTest_Expression = TestHelper;
 
-TEST_F(HlslGeneratorImplTest_Expression, ArrayAccessor) {
+TEST_F(HlslGeneratorImplTest_Expression, IndexAccessor) {
   Global("ary", ty.array<i32, 10>(), ast::StorageClass::kPrivate);
   auto* expr = IndexAccessor("ary", 5);
   WrapInFunction(expr);
diff --git a/src/writer/hlsl/generator_impl_member_accessor_test.cc b/src/writer/hlsl/generator_impl_member_accessor_test.cc
index ccefe54..195a160 100644
--- a/src/writer/hlsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/hlsl/generator_impl_member_accessor_test.cc
@@ -391,7 +391,7 @@
 }
 
 TEST_F(HlslGeneratorImplTest_MemberAccessor,
-       EmitExpression_ArrayAccessor_StorageBuffer_Load_Int_FromArray) {
+       EmitExpression_IndexAccessor_StorageBuffer_Load_Int_FromArray) {
   // struct Data {
   //   a : [[stride(4)]] array<i32, 5>;
   // };
@@ -423,7 +423,7 @@
 }
 
 TEST_F(HlslGeneratorImplTest_MemberAccessor,
-       EmitExpression_ArrayAccessor_StorageBuffer_Load_Int_FromArray_ExprIdx) {
+       EmitExpression_IndexAccessor_StorageBuffer_Load_Int_FromArray_ExprIdx) {
   // struct Data {
   //   a : [[stride(4)]] array<i32, 5>;
   // };
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index eccfa3a..f733b27 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -238,12 +238,12 @@
   return true;
 }
 
-bool GeneratorImpl::EmitArrayAccessor(
+bool GeneratorImpl::EmitIndexAccessor(
     std::ostream& out,
-    const ast::ArrayAccessorExpression* expr) {
+    const ast::IndexAccessorExpression* expr) {
   bool paren_lhs =
       !expr->array
-           ->IsAnyOf<ast::ArrayAccessorExpression, ast::CallExpression,
+           ->IsAnyOf<ast::IndexAccessorExpression, ast::CallExpression,
                      ast::IdentifierExpression, ast::MemberAccessorExpression,
                      ast::TypeConstructorExpression>();
 
@@ -763,7 +763,7 @@
   auto texture_expr = [&]() {
     bool paren_lhs =
         !texture
-             ->IsAnyOf<ast::ArrayAccessorExpression, ast::CallExpression,
+             ->IsAnyOf<ast::IndexAccessorExpression, ast::CallExpression,
                        ast::IdentifierExpression, ast::MemberAccessorExpression,
                        ast::TypeConstructorExpression>();
     if (paren_lhs) {
@@ -1418,8 +1418,8 @@
 
 bool GeneratorImpl::EmitExpression(std::ostream& out,
                                    const ast::Expression* expr) {
-  if (auto* a = expr->As<ast::ArrayAccessorExpression>()) {
-    return EmitArrayAccessor(out, a);
+  if (auto* a = expr->As<ast::IndexAccessorExpression>()) {
+    return EmitIndexAccessor(out, a);
   }
   if (auto* b = expr->As<ast::BinaryExpression>()) {
     return EmitBinary(out, b);
@@ -1905,7 +1905,7 @@
   auto write_lhs = [&] {
     bool paren_lhs =
         !expr->structure
-             ->IsAnyOf<ast::ArrayAccessorExpression, ast::CallExpression,
+             ->IsAnyOf<ast::IndexAccessorExpression, ast::CallExpression,
                        ast::IdentifierExpression, ast::MemberAccessorExpression,
                        ast::TypeConstructorExpression>();
     if (paren_lhs) {
diff --git a/src/writer/msl/generator_impl.h b/src/writer/msl/generator_impl.h
index 5c59326..557c941 100644
--- a/src/writer/msl/generator_impl.h
+++ b/src/writer/msl/generator_impl.h
@@ -19,7 +19,6 @@
 #include <unordered_map>
 #include <vector>
 
-#include "src/ast/array_accessor_expression.h"
 #include "src/ast/assignment_statement.h"
 #include "src/ast/binary_expression.h"
 #include "src/ast/bitcast_expression.h"
@@ -28,6 +27,7 @@
 #include "src/ast/discard_statement.h"
 #include "src/ast/expression.h"
 #include "src/ast/if_statement.h"
+#include "src/ast/index_accessor_expression.h"
 #include "src/ast/interpolate_decoration.h"
 #include "src/ast/loop_statement.h"
 #include "src/ast/member_accessor_expression.h"
@@ -99,8 +99,8 @@
   /// @param out the output of the expression stream
   /// @param expr the expression to emit
   /// @returns true if the array accessor was emitted
-  bool EmitArrayAccessor(std::ostream& out,
-                         const ast::ArrayAccessorExpression* expr);
+  bool EmitIndexAccessor(std::ostream& out,
+                         const ast::IndexAccessorExpression* expr);
   /// Handles an assignment statement
   /// @param stmt the statement to emit
   /// @returns true if the statement was emitted successfully
diff --git a/src/writer/msl/generator_impl_array_accessor_test.cc b/src/writer/msl/generator_impl_array_accessor_test.cc
index dc2f0dc..3dd881f 100644
--- a/src/writer/msl/generator_impl_array_accessor_test.cc
+++ b/src/writer/msl/generator_impl_array_accessor_test.cc
@@ -21,7 +21,7 @@
 
 using MslGeneratorImplTest = TestHelper;
 
-TEST_F(MslGeneratorImplTest, ArrayAccessor) {
+TEST_F(MslGeneratorImplTest, IndexAccessor) {
   auto* ary = Var("ary", ty.array<i32, 10>());
   auto* expr = IndexAccessor("ary", 5);
   WrapInFunction(ary, expr);
@@ -33,7 +33,7 @@
   EXPECT_EQ(out.str(), "ary[5]");
 }
 
-TEST_F(MslGeneratorImplTest, ArrayAccessor_OfDref) {
+TEST_F(MslGeneratorImplTest, IndexAccessor_OfDref) {
   Global("ary", ty.array<i32, 10>(), ast::StorageClass::kPrivate);
 
   auto* p = Const("p", nullptr, AddressOf("ary"));
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index a56e636..75d4d0d 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -565,7 +565,7 @@
 }
 
 uint32_t Builder::GenerateExpression(const ast::Expression* expr) {
-  if (auto* a = expr->As<ast::ArrayAccessorExpression>()) {
+  if (auto* a = expr->As<ast::IndexAccessorExpression>()) {
     return GenerateAccessorExpression(a);
   }
   if (auto* b = expr->As<ast::BinaryExpression>()) {
@@ -900,7 +900,7 @@
   return true;
 }
 
-bool Builder::GenerateArrayAccessor(const ast::ArrayAccessorExpression* expr,
+bool Builder::GenerateIndexAccessor(const ast::IndexAccessorExpression* expr,
                                     AccessorInfo* info) {
   auto idx_id = GenerateExpression(expr->index);
   if (idx_id == 0) {
@@ -1089,7 +1089,7 @@
 }
 
 uint32_t Builder::GenerateAccessorExpression(const ast::Expression* expr) {
-  if (!expr->IsAnyOf<ast::ArrayAccessorExpression,
+  if (!expr->IsAnyOf<ast::IndexAccessorExpression,
                      ast::MemberAccessorExpression>()) {
     TINT_ICE(Writer, builder_.Diagnostics()) << "expression is not an accessor";
     return 0;
@@ -1101,7 +1101,7 @@
   std::vector<const ast::Expression*> accessors;
   const ast::Expression* source = expr;
   while (true) {
-    if (auto* array = source->As<ast::ArrayAccessorExpression>()) {
+    if (auto* array = source->As<ast::IndexAccessorExpression>()) {
       accessors.insert(accessors.begin(), source);
       source = array->array;
     } else if (auto* member = source->As<ast::MemberAccessorExpression>()) {
@@ -1120,8 +1120,8 @@
   info.source_type = TypeOf(source);
 
   for (auto* accessor : accessors) {
-    if (auto* array = accessor->As<ast::ArrayAccessorExpression>()) {
-      if (!GenerateArrayAccessor(array, &info)) {
+    if (auto* array = accessor->As<ast::IndexAccessorExpression>()) {
+      if (!GenerateIndexAccessor(array, &info)) {
         return 0;
       }
     } else if (auto* member = accessor->As<ast::MemberAccessorExpression>()) {
diff --git a/src/writer/spirv/builder.h b/src/writer/spirv/builder.h
index 4ceefa2..a93e577 100644
--- a/src/writer/spirv/builder.h
+++ b/src/writer/spirv/builder.h
@@ -311,7 +311,7 @@
   /// @param expr the accessor to generate
   /// @param info the current accessor information
   /// @returns true if the accessor was generated successfully
-  bool GenerateArrayAccessor(const ast::ArrayAccessorExpression* expr,
+  bool GenerateIndexAccessor(const ast::IndexAccessorExpression* expr,
                              AccessorInfo* info);
   /// Generates a member accessor
   /// @param expr the accessor to generate
diff --git a/src/writer/spirv/builder_accessor_expression_test.cc b/src/writer/spirv/builder_accessor_expression_test.cc
index 266ed49..2e154fb 100644
--- a/src/writer/spirv/builder_accessor_expression_test.cc
+++ b/src/writer/spirv/builder_accessor_expression_test.cc
@@ -22,7 +22,7 @@
 
 using BuilderTest = TestHelper;
 
-TEST_F(BuilderTest, ArrayAccessor_VectorRef_Literal) {
+TEST_F(BuilderTest, IndexAccessor_VectorRef_Literal) {
   // var ary : vec3<f32>;
   // ary[1]  -> ref<f32>
 
@@ -57,7 +57,7 @@
 )");
 }
 
-TEST_F(BuilderTest, ArrayAccessor_VectorRef_Dynamic) {
+TEST_F(BuilderTest, IndexAccessor_VectorRef_Dynamic) {
   // var ary : vec3<f32>;
   // var idx : i32;
   // ary[idx]  -> ref<f32>
@@ -98,7 +98,7 @@
 )");
 }
 
-TEST_F(BuilderTest, ArrayAccessor_VectorRef_Dynamic2) {
+TEST_F(BuilderTest, IndexAccessor_VectorRef_Dynamic2) {
   // var ary : vec3<f32>;
   // ary[1 + 2]  -> ref<f32>
 
@@ -134,7 +134,7 @@
 )");
 }
 
-TEST_F(BuilderTest, ArrayAccessor_ArrayRef_MultiLevel) {
+TEST_F(BuilderTest, IndexAccessor_ArrayRef_MultiLevel) {
   auto* ary4 = ty.array(ty.vec3<f32>(), 4);
 
   // var ary : array<vec3<f32>, 4>
@@ -172,7 +172,7 @@
 )");
 }
 
-TEST_F(BuilderTest, ArrayAccessor_ArrayRef_ArrayWithSwizzle) {
+TEST_F(BuilderTest, IndexAccessor_ArrayRef_ArrayWithSwizzle) {
   auto* ary4 = ty.array(ty.vec3<f32>(), 4);
 
   // var a : array<vec3<f32>, 4>;
@@ -682,7 +682,7 @@
 )");
 }
 
-TEST_F(BuilderTest, ArrayAccessor_Mixed_ArrayAndMember) {
+TEST_F(BuilderTest, IndexAccessor_Mixed_ArrayAndMember) {
   // type C = struct {
   //   baz : vec3<f32>
   // }
@@ -749,7 +749,7 @@
 )");
 }
 
-TEST_F(BuilderTest, ArrayAccessor_Of_Vec) {
+TEST_F(BuilderTest, IndexAccessor_Of_Vec) {
   // let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
   //   vec2<f32>(0.0, 0.5),
   //   vec2<f32>(-0.5, -0.5),
@@ -792,7 +792,7 @@
   Validate(b);
 }
 
-TEST_F(BuilderTest, ArrayAccessor_Of_Array_Of_f32) {
+TEST_F(BuilderTest, IndexAccessor_Of_Array_Of_f32) {
   // let pos : array<array<f32, 2>, 3> = array<vec2<f32, 2>, 3>(
   //   array<f32, 2>(0.0, 0.5),
   //   array<f32, 2>(-0.5, -0.5),
@@ -837,7 +837,7 @@
   Validate(b);
 }
 
-TEST_F(BuilderTest, ArrayAccessor_Vec_Literal) {
+TEST_F(BuilderTest, IndexAccessor_Vec_Literal) {
   // let pos : vec2<f32> = vec2<f32>(0.0, 0.5);
   // pos[1]
 
@@ -866,7 +866,7 @@
 )");
 }
 
-TEST_F(BuilderTest, ArrayAccessor_Vec_Dynamic) {
+TEST_F(BuilderTest, IndexAccessor_Vec_Dynamic) {
   // let pos : vec2<f32> = vec2<f32>(0.0, 0.5);
   // idx : i32
   // pos[idx]
@@ -902,7 +902,7 @@
 )");
 }
 
-TEST_F(BuilderTest, ArrayAccessor_Array_Literal) {
+TEST_F(BuilderTest, IndexAccessor_Array_Literal) {
   // let a : array<f32, 3>;
   // a[2]
 
@@ -936,7 +936,7 @@
   Validate(b);
 }
 
-TEST_F(BuilderTest, ArrayAccessor_Array_Dynamic) {
+TEST_F(BuilderTest, IndexAccessor_Array_Dynamic) {
   // var a : array<f32, 3>;
   // idx : i32
   // a[idx]
@@ -984,7 +984,7 @@
   Validate(b);
 }
 
-TEST_F(BuilderTest, ArrayAccessor_Matrix_Dynamic) {
+TEST_F(BuilderTest, IndexAccessor_Matrix_Dynamic) {
   // var a : mat2x2<f32>(vec2<f32>(1., 2.), vec2<f32>(3., 4.));
   // idx : i32
   // a[idx]
diff --git a/src/writer/text_generator.h b/src/writer/text_generator.h
index 3bd2049..60084dd 100644
--- a/src/writer/text_generator.h
+++ b/src/writer/text_generator.h
@@ -141,7 +141,7 @@
     ~LineWriter();
 
     /// @returns the ostringstream
-    operator std::ostream &() { return os; }
+    operator std::ostream&() { return os; }
 
     /// @param rhs the value to write to the line
     /// @returns the ostream so calls can be chained
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index 00fca10..97ff2ff 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -116,8 +116,8 @@
 
 bool GeneratorImpl::EmitExpression(std::ostream& out,
                                    const ast::Expression* expr) {
-  if (auto* a = expr->As<ast::ArrayAccessorExpression>()) {
-    return EmitArrayAccessor(out, a);
+  if (auto* a = expr->As<ast::IndexAccessorExpression>()) {
+    return EmitIndexAccessor(out, a);
   }
   if (auto* b = expr->As<ast::BinaryExpression>()) {
     return EmitBinary(out, b);
@@ -152,12 +152,12 @@
   return false;
 }
 
-bool GeneratorImpl::EmitArrayAccessor(
+bool GeneratorImpl::EmitIndexAccessor(
     std::ostream& out,
-    const ast::ArrayAccessorExpression* expr) {
+    const ast::IndexAccessorExpression* expr) {
   bool paren_lhs =
       !expr->array
-           ->IsAnyOf<ast::ArrayAccessorExpression, ast::CallExpression,
+           ->IsAnyOf<ast::IndexAccessorExpression, ast::CallExpression,
                      ast::IdentifierExpression, ast::MemberAccessorExpression,
                      ast::TypeConstructorExpression>();
   if (paren_lhs) {
@@ -184,7 +184,7 @@
     const ast::MemberAccessorExpression* expr) {
   bool paren_lhs =
       !expr->structure
-           ->IsAnyOf<ast::ArrayAccessorExpression, ast::CallExpression,
+           ->IsAnyOf<ast::IndexAccessorExpression, ast::CallExpression,
                      ast::IdentifierExpression, ast::MemberAccessorExpression,
                      ast::TypeConstructorExpression>();
   if (paren_lhs) {
diff --git a/src/writer/wgsl/generator_impl.h b/src/writer/wgsl/generator_impl.h
index ca6a182..5a8559e 100644
--- a/src/writer/wgsl/generator_impl.h
+++ b/src/writer/wgsl/generator_impl.h
@@ -17,7 +17,6 @@
 
 #include <string>
 
-#include "src/ast/array_accessor_expression.h"
 #include "src/ast/assignment_statement.h"
 #include "src/ast/binary_expression.h"
 #include "src/ast/bitcast_expression.h"
@@ -27,6 +26,7 @@
 #include "src/ast/fallthrough_statement.h"
 #include "src/ast/for_loop_statement.h"
 #include "src/ast/if_statement.h"
+#include "src/ast/index_accessor_expression.h"
 #include "src/ast/loop_statement.h"
 #include "src/ast/member_accessor_expression.h"
 #include "src/ast/return_statement.h"
@@ -62,8 +62,8 @@
   /// @param out the output of the expression stream
   /// @param expr the expression to emit
   /// @returns true if the array accessor was emitted
-  bool EmitArrayAccessor(std::ostream& out,
-                         const ast::ArrayAccessorExpression* expr);
+  bool EmitIndexAccessor(std::ostream& out,
+                         const ast::IndexAccessorExpression* expr);
   /// Handles an assignment statement
   /// @param stmt the statement to emit
   /// @returns true if the statement was emitted successfully
diff --git a/src/writer/wgsl/generator_impl_array_accessor_test.cc b/src/writer/wgsl/generator_impl_array_accessor_test.cc
index 4eff51a..e6d5af3 100644
--- a/src/writer/wgsl/generator_impl_array_accessor_test.cc
+++ b/src/writer/wgsl/generator_impl_array_accessor_test.cc
@@ -21,7 +21,7 @@
 
 using WgslGeneratorImplTest = TestHelper;
 
-TEST_F(WgslGeneratorImplTest, ArrayAccessor) {
+TEST_F(WgslGeneratorImplTest, IndexAccessor) {
   Global("ary", ty.array<i32, 10>(), ast::StorageClass::kPrivate);
   auto* expr = IndexAccessor("ary", 5);
   WrapInFunction(expr);
@@ -33,7 +33,7 @@
   EXPECT_EQ(out.str(), "ary[5]");
 }
 
-TEST_F(WgslGeneratorImplTest, ArrayAccessor_OfDref) {
+TEST_F(WgslGeneratorImplTest, IndexAccessor_OfDref) {
   Global("ary", ty.array<i32, 10>(), ast::StorageClass::kPrivate);
 
   auto* p = Const("p", nullptr, AddressOf("ary"));
diff --git a/test/BUILD.gn b/test/BUILD.gn
index a8a6cd1..fa6e2a7 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -146,7 +146,6 @@
 tint_unittests_source_set("tint_unittests_core_src") {
   sources = [
     "../src/ast/alias_test.cc",
-    "../src/ast/array_accessor_expression_test.cc",
     "../src/ast/array_test.cc",
     "../src/ast/assignment_statement_test.cc",
     "../src/ast/atomic_test.cc",
@@ -174,6 +173,7 @@
     "../src/ast/function_test.cc",
     "../src/ast/group_decoration_test.cc",
     "../src/ast/i32_test.cc",
+    "../src/ast/index_accessor_expression_test.cc",
     "../src/ast/identifier_expression_test.cc",
     "../src/ast/if_statement_test.cc",
     "../src/ast/int_literal_expression_test.cc",
