diff --git a/src/main/java/com/google/devtools/build/lib/packages/AstParseResult.java b/src/main/java/com/google/devtools/build/lib/packages/AstParseResult.java
index 08d6bb2..fc0cd9b 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AstParseResult.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AstParseResult.java
@@ -16,15 +16,15 @@
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.ExtendedEventHandler.Postable;
 import com.google.devtools.build.lib.events.StoredEventHandler;
-import com.google.devtools.build.lib.syntax.BuildFileAST;
+import com.google.devtools.build.lib.syntax.StarlarkFile;
 
 /** The result of parsing a BUILD file. */
 public class AstParseResult {
-  public final BuildFileAST ast;
+  public final StarlarkFile ast;
   public final Iterable<Event> allEvents;
   public final Iterable<Postable> allPosts;
 
-  public AstParseResult(BuildFileAST ast, StoredEventHandler astParsingEventHandler) {
+  public AstParseResult(StarlarkFile ast, StoredEventHandler astParsingEventHandler) {
     this.ast = ast;
     this.allPosts = astParsingEventHandler.getPosts();
     this.allEvents = astParsingEventHandler.getEvents();
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
index 56124b8..3ea6144 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -43,7 +43,6 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
 import com.google.devtools.build.lib.syntax.Argument;
 import com.google.devtools.build.lib.syntax.BaseFunction;
-import com.google.devtools.build.lib.syntax.BuildFileAST;
 import com.google.devtools.build.lib.syntax.BuiltinFunction;
 import com.google.devtools.build.lib.syntax.CallUtils;
 import com.google.devtools.build.lib.syntax.ClassObject;
@@ -69,6 +68,7 @@
 import com.google.devtools.build.lib.syntax.SkylarkSignatureProcessor;
 import com.google.devtools.build.lib.syntax.SkylarkUtils;
 import com.google.devtools.build.lib.syntax.SkylarkUtils.Phase;
+import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.syntax.StarlarkThread.Extension;
@@ -1373,12 +1373,8 @@
     StoredEventHandler localReporterForParsing = new StoredEventHandler();
     // Run the lexer and parser with a local reporter, so that errors from other threads do not
     // show up below.
-    BuildFileAST buildFileAST =
-        parseBuildFile(
-            packageId,
-            input,
-            preludeStatements,
-            localReporterForParsing);
+    StarlarkFile buildFileAST =
+        parseBuildFile(packageId, input, preludeStatements, localReporterForParsing);
     AstParseResult astParseResult =
         new AstParseResult(buildFileAST, localReporterForParsing);
     return createPackageFromAst(
@@ -1394,15 +1390,15 @@
         globber);
   }
 
-  public static BuildFileAST parseBuildFile(
+  public static StarlarkFile parseBuildFile(
       PackageIdentifier packageId,
       ParserInput input,
       List<Statement> preludeStatements,
       ExtendedEventHandler eventHandler) {
     // Logged messages are used as a testability hook tracing the parsing progress
     logger.fine("Starting to parse " + packageId);
-    BuildFileAST buildFileAST =
-        BuildFileAST.parseWithPrelude(input, preludeStatements, eventHandler);
+    StarlarkFile buildFileAST =
+        StarlarkFile.parseWithPrelude(input, preludeStatements, eventHandler);
     logger.fine("Finished parsing of " + packageId);
     return buildFileAST;
   }
@@ -1722,7 +1718,7 @@
   public Package.Builder evaluateBuildFile(
       String workspaceName,
       PackageIdentifier packageId,
-      BuildFileAST file,
+      StarlarkFile file,
       RootedPath buildFilePath,
       Globber globber,
       Iterable<Event> pastEvents,
@@ -1925,7 +1921,7 @@
   // files.
   // TODO(adonovan): this is the ideal place to extract string literals from glob calls for
   // prefetching. Combine.
-  public static boolean checkBuildSyntax(BuildFileAST file, final EventHandler eventHandler) {
+  public static boolean checkBuildSyntax(StarlarkFile file, final EventHandler eventHandler) {
     final boolean[] success = {true};
     NodeVisitor checker =
         new NodeVisitor() {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
index 230abe9..dc59b49 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
@@ -29,7 +29,6 @@
 import com.google.devtools.build.lib.packages.Package.NameConflictException;
 import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension;
 import com.google.devtools.build.lib.syntax.BaseFunction;
-import com.google.devtools.build.lib.syntax.BuildFileAST;
 import com.google.devtools.build.lib.syntax.BuiltinFunction;
 import com.google.devtools.build.lib.syntax.CallUtils;
 import com.google.devtools.build.lib.syntax.ClassObject;
@@ -41,6 +40,7 @@
 import com.google.devtools.build.lib.syntax.Runtime;
 import com.google.devtools.build.lib.syntax.SkylarkUtils;
 import com.google.devtools.build.lib.syntax.SkylarkUtils.Phase;
+import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.syntax.StarlarkThread.Extension;
@@ -134,7 +134,7 @@
     if (localReporter == null) {
       localReporter = new StoredEventHandler();
     }
-    BuildFileAST buildFileAST = BuildFileAST.parse(source, localReporter);
+    StarlarkFile buildFileAST = StarlarkFile.parse(source, localReporter);
     if (buildFileAST.containsErrors()) {
       throw new BuildFileContainsErrorsException(
           LabelConstants.EXTERNAL_PACKAGE_IDENTIFIER, "Failed to parse " + source.getPath());
@@ -153,7 +153,7 @@
    * the //external package.
    */
   public void execute(
-      BuildFileAST file,
+      StarlarkFile file,
       Map<String, Extension> importedExtensions,
       StarlarkSemantics starlarkSemantics,
       WorkspaceFileValue.WorkspaceFileKey workspaceFileKey)
@@ -165,7 +165,7 @@
   }
 
   private void execute(
-      BuildFileAST file,
+      StarlarkFile file,
       @Nullable Map<String, Extension> importedExtensions,
       StarlarkSemantics starlarkSemantics,
       StoredEventHandler localReporter,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileFunction.java
index f2e2f8f..ec711e8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileFunction.java
@@ -23,9 +23,9 @@
 import com.google.devtools.build.lib.packages.NoSuchThingException;
 import com.google.devtools.build.lib.rules.repository.ResolvedFileValue.ResolvedFileKey;
 import com.google.devtools.build.lib.skyframe.PrecomputedValue;
-import com.google.devtools.build.lib.syntax.BuildFileAST;
 import com.google.devtools.build.lib.syntax.Mutability;
 import com.google.devtools.build.lib.syntax.ParserInput;
+import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -63,8 +63,8 @@
         byte[] bytes =
             FileSystemUtils.readWithKnownFileSize(
                 key.getPath().asPath(), key.getPath().asPath().getFileSize());
-        BuildFileAST ast =
-            BuildFileAST.parse(
+        StarlarkFile ast =
+            StarlarkFile.parse(
                 ParserInput.create(bytes, key.getPath().asPath().asFragment()), env.getListener());
         if (ast.containsErrors()) {
           throw new ResolvedFileFunctionException(
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunction.java
index d065bfd..5cb106c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupFunction.java
@@ -20,9 +20,9 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.BuildFileNotFoundException;
 import com.google.devtools.build.lib.packages.RuleClassProvider;
-import com.google.devtools.build.lib.syntax.BuildFileAST;
 import com.google.devtools.build.lib.syntax.Mutability;
 import com.google.devtools.build.lib.syntax.ParserInput;
+import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -41,10 +41,10 @@
 /**
  * A SkyFunction for {@link ASTFileLookupValue}s.
  *
- * <p> Given a {@link Label} referencing a Skylark file, loads it as a syntax tree
- * ({@link BuildFileAST}). The Label must be absolute, and must not reference the special
- * {@code external} package. If the file (or the package containing it) doesn't exist, the
- * function doesn't fail, but instead returns a specific {@code NO_FILE} {@link ASTFileLookupValue}.
+ * <p>Given a {@link Label} referencing a Skylark file, loads it as a syntax tree ({@link
+ * StarlarkFile}). The Label must be absolute, and must not reference the special {@code external}
+ * package. If the file (or the package containing it) doesn't exist, the function doesn't fail, but
+ * instead returns a specific {@code NO_FILE} {@link ASTFileLookupValue}.
  */
 public class ASTFileLookupFunction implements SkyFunction {
 
@@ -110,7 +110,7 @@
     }
 
     // Both the package and the file exist; load the file and parse it as an AST.
-    BuildFileAST file = null;
+    StarlarkFile file = null;
     Path path = rootedPath.asPath();
     try {
       long astFileSize = fileValue.getSize();
@@ -127,7 +127,7 @@
                 /*repoMapping=*/ ImmutableMap.of());
         byte[] bytes = FileSystemUtils.readWithKnownFileSize(path, astFileSize);
         ParserInput input = ParserInput.create(bytes, path.asFragment());
-        file = BuildFileAST.parseWithDigest(input, path.getDigest(), env.getListener());
+        file = StarlarkFile.parseWithDigest(input, path.getDigest(), env.getListener());
         file = file.validate(thread, /*isBuildFile=*/ false, env.getListener());
       }
     } catch (IOException e) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupValue.java
index 7f38607..7104882 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ASTFileLookupValue.java
@@ -19,7 +19,7 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.BuildFileAST;
+import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
 import com.google.devtools.build.skyframe.NotComparableSkyValue;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -33,23 +33,25 @@
 // almost certainly be unequal to the previous value. This is because of (i) the change-pruning
 // semantics of the PackageLookupValue dep and the FileValue dep; consider the latter: if the
 // FileValue for the bzl file has changed, then the contents of the bzl file probably changed and
-// (ii) we don't currently have skylark-semantic-equality in BuildFileAST, so two BuildFileAST
+// (ii) we don't currently have skylark-semantic-equality in StarlarkFile, so two StarlarkFile
 // instances representing two different contents of a bzl file will be different.
 // TODO(bazel-team): Consider doing better here. As a pre-req, we would need
-// skylark-semantic-equality in BuildFileAST, rather than equality naively based on the contents of
+// skylark-semantic-equality in StarlarkFile, rather than equality naively based on the contents of
 // the bzl file. For a concrete example, the contents of comment lines do not currently impact
 // skylark semantics.
 public abstract class ASTFileLookupValue implements NotComparableSkyValue {
   public abstract boolean lookupSuccessful();
-  public abstract BuildFileAST getAST();
+
+  public abstract StarlarkFile getAST();
+
   public abstract String getErrorMsg();
 
   /** If the file is found, this class encapsulates the parsed AST. */
   @AutoCodec.VisibleForSerialization
   public static class ASTLookupWithFile extends ASTFileLookupValue {
-    private final BuildFileAST ast;
+    private final StarlarkFile ast;
 
-    private ASTLookupWithFile(BuildFileAST ast) {
+    private ASTLookupWithFile(StarlarkFile ast) {
       Preconditions.checkNotNull(ast);
       this.ast = ast;
     }
@@ -60,7 +62,7 @@
     }
 
     @Override
-    public BuildFileAST getAST() {
+    public StarlarkFile getAST() {
       return this.ast;
     }
 
@@ -86,7 +88,7 @@
     }
 
     @Override
-    public BuildFileAST getAST() {
+    public StarlarkFile getAST() {
       throw new IllegalStateException("attempted to retrieve AST from an unsuccessful lookup");
     }
 
@@ -111,7 +113,7 @@
         String.format("Unable to load file '%s': it isn't a regular file", fileLabel));
   }
 
-  public static ASTFileLookupValue withFile(BuildFileAST ast) {
+  public static ASTFileLookupValue withFile(StarlarkFile ast) {
     return new ASTLookupWithFile(ast);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
index dbbbf39..6b8ede8 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
@@ -56,9 +56,9 @@
 import com.google.devtools.build.lib.skyframe.GlobValue.InvalidGlobPatternException;
 import com.google.devtools.build.lib.skyframe.SkylarkImportLookupFunction.SkylarkImportFailedException;
 import com.google.devtools.build.lib.skyframe.SkylarkImportLookupValue.SkylarkImportLookupKey;
-import com.google.devtools.build.lib.syntax.BuildFileAST;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.ParserInput;
+import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkThread.Extension;
 import com.google.devtools.build.lib.syntax.Statement;
@@ -548,7 +548,7 @@
       RootedPath buildFilePath,
       PackageIdentifier packageId,
       ImmutableMap<RepositoryName, RepositoryName> repoMapping,
-      BuildFileAST file,
+      StarlarkFile file,
       int workspaceChunk,
       Environment env,
       SkylarkImportLookupFunction skylarkImportLookupFunctionForInlining)
@@ -1167,7 +1167,7 @@
         }
         input = ParserInput.create(buildFileBytes, inputFile.asFragment());
         StoredEventHandler astParsingEventHandler = new StoredEventHandler();
-        BuildFileAST ast =
+        StarlarkFile ast =
             PackageFactory.parseBuildFile(
                 packageId, input, preludeStatements, astParsingEventHandler);
         astParseResult = new AstParseResult(ast, astParsingEventHandler);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
index db9176f..b4d8881 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
@@ -44,11 +44,11 @@
 import com.google.devtools.build.lib.packages.WorkspaceFileValue;
 import com.google.devtools.build.lib.skyframe.SkylarkImportLookupValue.SkylarkImportLookupKey;
 import com.google.devtools.build.lib.syntax.AssignmentStatement;
-import com.google.devtools.build.lib.syntax.BuildFileAST;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Identifier;
 import com.google.devtools.build.lib.syntax.LoadStatement;
 import com.google.devtools.build.lib.syntax.Mutability;
+import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.syntax.StarlarkThread.Extension;
@@ -319,7 +319,7 @@
       // Skylark import files have to exist.
       throw new SkylarkImportFailedException(astLookupValue.getErrorMsg());
     }
-    BuildFileAST file = astLookupValue.getAST();
+    StarlarkFile file = astLookupValue.getAST();
     if (file.containsErrors()) {
       throw SkylarkImportFailedException.skylarkErrors(filePath);
     }
@@ -443,7 +443,7 @@
   @Nullable
   static Map<String, Label> getLoadMap(
       EventHandler handler,
-      BuildFileAST file,
+      StarlarkFile file,
       PackageIdentifier base,
       ImmutableMap<RepositoryName, RepositoryName> repoMapping) {
     Preconditions.checkArgument(!base.getRepository().isDefault());
@@ -577,7 +577,7 @@
 
   /** Creates the Extension to be imported. */
   private Extension createExtension(
-      BuildFileAST ast,
+      StarlarkFile ast,
       Label extensionLabel,
       Map<String, Extension> importMap,
       StarlarkSemantics starlarkSemantics,
@@ -616,7 +616,7 @@
   }
 
   public static void execAndExport(
-      BuildFileAST ast,
+      StarlarkFile ast,
       Label extensionLabel,
       EventHandler eventHandler,
       StarlarkThread extensionThread)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java
index 55b14b4..e33ade1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTFunction.java
@@ -27,10 +27,10 @@
 import com.google.devtools.build.lib.packages.RuleClassProvider;
 import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
 import com.google.devtools.build.lib.rules.repository.ResolvedFileValue;
-import com.google.devtools.build.lib.syntax.BuildFileAST;
 import com.google.devtools.build.lib.syntax.LoadStatement;
 import com.google.devtools.build.lib.syntax.ParserInput;
 import com.google.devtools.build.lib.syntax.Printer;
+import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.syntax.Statement;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.Path;
@@ -45,9 +45,7 @@
 import java.util.List;
 import java.util.Map;
 
-/**
- * A SkyFunction to parse WORKSPACE files into a BuildFileAST.
- */
+/** A SkyFunction to parse WORKSPACE files into a StarlarkFile. */
 public class WorkspaceASTFunction implements SkyFunction {
   private final RuleClassProvider ruleClassProvider;
 
@@ -81,8 +79,8 @@
 
     Path repoWorkspace = workspaceRoot.getRoot().getRelative(workspaceRoot.getRootRelativePath());
     try {
-      BuildFileAST file =
-          BuildFileAST.parse(
+      StarlarkFile file =
+          StarlarkFile.parse(
               ParserInput.create(
                   ruleClassProvider.getDefaultWorkspacePrefix(),
                   PathFragment.create("/DEFAULT.WORKSPACE")),
@@ -96,7 +94,7 @@
       }
       if (newWorkspaceFileContents != null) {
         file =
-            BuildFileAST.parseVirtualBuildFile(
+            StarlarkFile.parseVirtualBuildFile(
                 ParserInput.create(
                     newWorkspaceFileContents, resolvedFile.get().asPath().asFragment()),
                 file.getStatements(),
@@ -105,7 +103,7 @@
         byte[] bytes =
             FileSystemUtils.readWithKnownFileSize(repoWorkspace, repoWorkspace.getFileSize());
         file =
-            BuildFileAST.parseWithPrelude(
+            StarlarkFile.parseWithPrelude(
                 ParserInput.create(bytes, repoWorkspace.asFragment()),
                 file.getStatements(),
                 env.getListener());
@@ -117,7 +115,7 @@
         }
       }
       file =
-          BuildFileAST.parseWithPrelude(
+          StarlarkFile.parseWithPrelude(
               ParserInput.create(
                   resolvedFile.isPresent() ? "" : ruleClassProvider.getDefaultWorkspaceSuffix(),
                   PathFragment.create("/DEFAULT.WORKSPACE.SUFFIX")),
@@ -222,8 +220,8 @@
    * Cut {@code ast} into a list of AST separated by load statements. We cut right before each load
    * statement series.
    */
-  private static ImmutableList<BuildFileAST> splitAST(BuildFileAST ast) {
-    ImmutableList.Builder<BuildFileAST> asts = ImmutableList.builder();
+  private static ImmutableList<StarlarkFile> splitAST(StarlarkFile ast) {
+    ImmutableList.Builder<StarlarkFile> asts = ImmutableList.builder();
     int prevIdx = 0;
     boolean lastIsLoad = true; // don't cut if the first statement is a load.
     List<Statement> statements = ast.getStatements();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTValue.java
index 7011784..6397c79 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceASTValue.java
@@ -18,7 +18,7 @@
 import com.google.common.collect.Interner;
 import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.syntax.BuildFileAST;
+import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.AbstractSkyKey;
 import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -48,14 +48,14 @@
  */
 public class WorkspaceASTValue implements SkyValue {
 
-  private final ImmutableList<BuildFileAST> asts;
+  private final ImmutableList<StarlarkFile> asts;
 
-  public WorkspaceASTValue(List<BuildFileAST> asts) {
+  public WorkspaceASTValue(List<StarlarkFile> asts) {
     Preconditions.checkNotNull(asts);
     this.asts = ImmutableList.copyOf(asts);
   }
 
-  public ImmutableList<BuildFileAST> getASTs() {
+  public ImmutableList<StarlarkFile> getASTs() {
     return asts;
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
index 74716bd..22aadd5 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
@@ -25,8 +25,8 @@
 import com.google.devtools.build.lib.packages.WorkspaceFactory;
 import com.google.devtools.build.lib.packages.WorkspaceFileValue;
 import com.google.devtools.build.lib.packages.WorkspaceFileValue.WorkspaceFileKey;
-import com.google.devtools.build.lib.syntax.BuildFileAST;
 import com.google.devtools.build.lib.syntax.Mutability;
+import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkThread.Extension;
 import com.google.devtools.build.lib.vfs.RootedPath;
@@ -123,7 +123,7 @@
         }
         parser.setParent(prevValue.getPackage(), prevValue.getImportMap(), prevValue.getBindings());
       }
-      BuildFileAST ast = workspaceASTValue.getASTs().get(key.getIndex());
+      StarlarkFile ast = workspaceASTValue.getASTs().get(key.getIndex());
       PackageFunction.SkylarkImportResult importResult =
           PackageFunction.fetchImportsFromBuildFile(
               repoWorkspace,
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Comment.java b/src/main/java/com/google/devtools/build/lib/syntax/Comment.java
index a5924f9..9ca6728 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Comment.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Comment.java
@@ -36,7 +36,7 @@
   @Override
   public void prettyPrint(Appendable buffer, int indentLevel) throws IOException {
     // We can't really print comments in the right place anyway, due to how their relative order
-    // is lost in the representation of BuildFileAST. So don't bother word-wrapping and just print
+    // is lost in the representation of StarlarkFile. So don't bother word-wrapping and just print
     // it on a single line.
     printIndent(buffer, indentLevel);
     buffer.append("# ");
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Expression.java b/src/main/java/com/google/devtools/build/lib/syntax/Expression.java
index 5368e2e..06bc54c 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Expression.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Expression.java
@@ -69,7 +69,7 @@
   // TODO(adonovan): remove dependency from syntax -> EventHandler.
   // A call to Expression.parse either succeeds or fails; there is no useful middle ground, so an
   // exception is appropriate. The exception would contain the list of errors.
-  // By contrast, a call to BuildFileAST.parse should return both a partial AST and a list of
+  // By contrast, a call to StarlarkFile.parse should return both a partial AST and a list of
   // errors,
   // and generally it is useful to keep both around, so if we put the errors in the root of the AST,
   // then client can deal with them however they like, e.g. by sending them to the event handler.
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Node.java b/src/main/java/com/google/devtools/build/lib/syntax/Node.java
index 1150116..d19b669 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Node.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Node.java
@@ -92,7 +92,7 @@
    *
    * <p>Pretty printing can also be used as a proxy for comparing for equality between two ASTs.
    * This can be very useful in tests. However, it is still possible for two different trees to have
-   * the same pretty printing. In particular, {@link BuildFileAST} includes import metadata and
+   * the same pretty printing. In particular, {@link StarlarkFile} includes import metadata and
    * comment information that is not reflected in the string.
    */
   public abstract void prettyPrint(Appendable buffer, int indentLevel) throws IOException;
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/NodeVisitor.java b/src/main/java/com/google/devtools/build/lib/syntax/NodeVisitor.java
index eaaa97d..a98a016 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/NodeVisitor.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/NodeVisitor.java
@@ -53,7 +53,7 @@
     }
   }
 
-  public void visit(BuildFileAST node) {
+  public void visit(StarlarkFile node) {
     visitBlock(node.getStatements());
     visitAll(node.getComments());
   }
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
index 6834531..ff4e4d8 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
@@ -41,7 +41,7 @@
  */
 // TODO(adonovan): break syntax->events dependency and simplify error handling in the API. The
 // result of parsing is a complete, partial, or even empty, file plus a list of errors. For
-// BuildFileAST.parse, we should materialize the error list within the BuildFileAST and remove all
+// StarlarkFile.parse, we should materialize the error list within the StarlarkFile and remove all
 // mention of event handlers; let the client decide whether to throw or report errors. For
 // Expression.parse, throwing an exception is appropriate: expressions are typically so short that
 // only one error is wanted, so the result can be all-or-nothing.
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSignatureProcessor.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSignatureProcessor.java
index 83723fa..5cd12f4 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSignatureProcessor.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSignatureProcessor.java
@@ -251,7 +251,7 @@
                   .setEventHandler(StarlarkThread.FAIL_FAST_HANDLER)
                   .build()
                   .update("unbound", Runtime.UNBOUND);
-          defaultValue = BuildFileAST.eval(ParserInput.fromLines(paramDefaultValue), thread);
+          defaultValue = StarlarkFile.eval(ParserInput.fromLines(paramDefaultValue), thread);
           defaultValueCache.put(paramDefaultValue, defaultValue);
           return defaultValue;
         }
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkFile.java
similarity index 91%
rename from src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java
rename to src/main/java/com/google/devtools/build/lib/syntax/StarlarkFile.java
index 7f7e7b5..9a9f458 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/BuildFileAST.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkFile.java
@@ -24,8 +24,7 @@
 import javax.annotation.Nullable;
 
 /** Syntax tree for a Starlark file, such as a Bazel BUILD or .bzl file. */
-// TODO(adonovan): rename to StarlarkFile.
-public class BuildFileAST extends Node {
+public class StarlarkFile extends Node {
 
   private final ImmutableList<Statement> statements;
 
@@ -40,7 +39,7 @@
 
   @Nullable private final String contentHashCode;
 
-  private BuildFileAST(
+  private StarlarkFile(
       ImmutableList<Statement> statements,
       boolean containsErrors,
       String contentHashCode,
@@ -55,7 +54,7 @@
     this.stringEscapeEvents = stringEscapeEvents;
   }
 
-  private static BuildFileAST create(
+  private static StarlarkFile create(
       List<Statement> preludeStatements,
       ParseResult result,
       String contentHashCode,
@@ -75,7 +74,7 @@
       statementsbuilder.addAll(result.statements);
     }
     ImmutableList<Statement> statements = statementsbuilder.build();
-    return new BuildFileAST(
+    return new StarlarkFile(
         statements,
         result.containsErrors,
         contentHashCode,
@@ -88,9 +87,9 @@
    * Extract a subtree containing only statements from {@code firstStatement} (included) up to
    * {@code lastStatement} excluded.
    */
-  public BuildFileAST subTree(int firstStatement, int lastStatement) {
+  public StarlarkFile subTree(int firstStatement, int lastStatement) {
     ImmutableList<Statement> statements = this.statements.subList(firstStatement, lastStatement);
-    return new BuildFileAST(
+    return new StarlarkFile(
         statements,
         containsErrors,
         null,
@@ -207,7 +206,7 @@
 
   @Override
   public String toString() {
-    return "<BuildFileAST with " + statements.size() + " statements>";
+    return "<StarlarkFile with " + statements.size() + " statements>";
   }
 
   @Override
@@ -220,10 +219,8 @@
    * front of its statement list. All errors during scanning or parsing will be reported to the
    * event handler.
    */
-  public static BuildFileAST parseWithPrelude(
-      ParserInput input,
-      List<Statement> preludeStatements,
-      EventHandler eventHandler) {
+  public static StarlarkFile parseWithPrelude(
+      ParserInput input, List<Statement> preludeStatements, EventHandler eventHandler) {
     Parser.ParseResult result = Parser.parseFile(input, eventHandler);
     return create(
         preludeStatements, result, /* contentHashCode= */ null, /*allowImportInternal=*/ false);
@@ -234,16 +231,14 @@
    * exempt from visibility restrictions. All errors during scanning or parsing will be reported to
    * the event handler.
    */
-  public static BuildFileAST parseVirtualBuildFile(
-      ParserInput input,
-      List<Statement> preludeStatements,
-      EventHandler eventHandler) {
+  public static StarlarkFile parseVirtualBuildFile(
+      ParserInput input, List<Statement> preludeStatements, EventHandler eventHandler) {
     Parser.ParseResult result = Parser.parseFile(input, eventHandler);
     return create(
         preludeStatements, result, /* contentHashCode= */ null, /*allowImportInternal=*/ true);
   }
 
-  public static BuildFileAST parseWithDigest(
+  public static StarlarkFile parseWithDigest(
       ParserInput input, byte[] digest, EventHandler eventHandler) throws IOException {
     Parser.ParseResult result = Parser.parseFile(input, eventHandler);
     return create(
@@ -253,7 +248,7 @@
         /* allowImportInternal= */ false);
   }
 
-  public static BuildFileAST parse(ParserInput input, EventHandler eventHandler) {
+  public static StarlarkFile parse(ParserInput input, EventHandler eventHandler) {
     Parser.ParseResult result = Parser.parseFile(input, eventHandler);
     return create(
         /* preludeStatements= */ ImmutableList.<Statement>of(),
@@ -267,9 +262,9 @@
    * during scanning or parsing will be reported to the event handler.
    */
   // TODO(adonovan): redundant; delete.
-  public static BuildFileAST parseWithoutImports(ParserInput input, EventHandler eventHandler) {
+  public static StarlarkFile parseWithoutImports(ParserInput input, EventHandler eventHandler) {
     ParseResult result = Parser.parseFile(input, eventHandler);
-    return new BuildFileAST(
+    return new StarlarkFile(
         ImmutableList.copyOf(result.statements),
         result.containsErrors,
         /* contentHashCode= */ null,
@@ -286,7 +281,7 @@
   // TODO(adonovan): eliminate. Most callers need validation because they intend to execute the
   // file, and should be made to use higher-level operations in EvalUtils.
   // rest should skip this step. Called from EvaluationTestCase, ParserTest, ASTFileLookupFunction.
-  public BuildFileAST validate(
+  public StarlarkFile validate(
       StarlarkThread thread, boolean isBuildFile, EventHandler eventHandler) {
     try {
       ValidationEnvironment.validateFile(this, thread, isBuildFile);
@@ -299,7 +294,7 @@
     if (containsErrors) {
       return this; // already marked as errant
     }
-    return new BuildFileAST(
+    return new StarlarkFile(
         statements,
         /*containsErrors=*/ true,
         contentHashCode,
@@ -338,7 +333,7 @@
   @Nullable
   public static Object eval(ParserInput input, StarlarkThread thread)
       throws EvalException, InterruptedException {
-    BuildFileAST ast = parseAndValidateSkylark(input, thread);
+    StarlarkFile ast = parseAndValidateSkylark(input, thread);
     return ast.eval(thread);
   }
 
@@ -347,9 +342,9 @@
    * it throws an EvalException. Uses Starlark (not BUILD) validation semantics.
    */
   // TODO(adonovan): move to EvalUtils; see above.
-  public static BuildFileAST parseAndValidateSkylark(ParserInput input, StarlarkThread thread)
+  public static StarlarkFile parseAndValidateSkylark(ParserInput input, StarlarkThread thread)
       throws EvalException {
-    BuildFileAST file = parse(input, thread.getEventHandler());
+    StarlarkFile file = parse(input, thread.getEventHandler());
     file.replayLexerEvents(thread, thread.getEventHandler());
     ValidationEnvironment.validateFile(file, thread, /*isBuildFile=*/ false);
     return file;
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkThread.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkThread.java
index a7732e2..a03b7de 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkThread.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkThread.java
@@ -1206,7 +1206,7 @@
   // TODO(adonovan): push this up into the debugger once the exec API is finalized.
   public void debugExec(ParserInput input) throws EvalException, InterruptedException {
     EvalEventHandler handler = new EvalEventHandler();
-    BuildFileAST file = BuildFileAST.parse(input, handler);
+    StarlarkFile file = StarlarkFile.parse(input, handler);
     if (!handler.messages.isEmpty()) {
       Event ev = handler.messages.get(0);
       throw new EvalException(ev.getLocation(), ev.getMessage());
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java b/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java
index d3d90b5..bb61d57 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java
@@ -396,7 +396,7 @@
 
   // Public entry point, throwing variant.
   // TODO(adonovan): combine with variant below.
-  public static void validateFile(BuildFileAST file, StarlarkThread thread, boolean isBuildFile)
+  public static void validateFile(StarlarkFile file, StarlarkThread thread, boolean isBuildFile)
       throws EvalException {
     try {
       ValidationEnvironment venv = new ValidationEnvironment(thread, isBuildFile);
@@ -410,7 +410,7 @@
 
   // Public entry point, error handling variant.
   public static boolean validateFile(
-      BuildFileAST file, StarlarkThread thread, boolean isBuildFile, EventHandler eventHandler) {
+      StarlarkFile file, StarlarkThread thread, boolean isBuildFile, EventHandler eventHandler) {
     try {
       validateFile(file, thread, isBuildFile);
       return true;
diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
index f1368e8..a960812 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -55,13 +55,13 @@
 import com.google.devtools.build.lib.skylarkbuildapi.stubs.SkylarkAspectStub;
 import com.google.devtools.build.lib.skylarkbuildapi.test.TestingBootstrap;
 import com.google.devtools.build.lib.syntax.BaseFunction;
-import com.google.devtools.build.lib.syntax.BuildFileAST;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.LoadStatement;
 import com.google.devtools.build.lib.syntax.MethodLibrary;
 import com.google.devtools.build.lib.syntax.Mutability;
 import com.google.devtools.build.lib.syntax.ParserInput;
 import com.google.devtools.build.lib.syntax.Runtime;
+import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.syntax.StarlarkFunction;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
@@ -389,7 +389,7 @@
     }
   }
 
-  private static String getModuleDoc(BuildFileAST buildFileAST) {
+  private static String getModuleDoc(StarlarkFile buildFileAST) {
     ImmutableList<Statement> fileStatements = buildFileAST.getStatements();
     if (!fileStatements.isEmpty()) {
       Statement moduleComment = fileStatements.get(0);
@@ -429,7 +429,7 @@
     pending.add(path);
 
     ParserInput parserInputSource = getInputSource(path.toString());
-    BuildFileAST file = BuildFileAST.parse(parserInputSource, eventHandler);
+    StarlarkFile file = StarlarkFile.parse(parserInputSource, eventHandler);
 
     moduleDocMap.put(label, getModuleDoc(file));
 
@@ -490,7 +490,7 @@
   /** Evaluates the AST from a single skylark file, given the already-resolved imports. */
   private StarlarkThread evalSkylarkBody(
       StarlarkSemantics semantics,
-      BuildFileAST buildFileAST,
+      StarlarkFile buildFileAST,
       Map<String, Extension> imports,
       List<RuleInfoWrapper> ruleInfoList,
       List<ProviderInfoWrapper> providerInfoList,
diff --git a/src/main/java/com/google/devtools/starlark/Starlark.java b/src/main/java/com/google/devtools/starlark/Starlark.java
index 0da0ace..bcfc5e1 100644
--- a/src/main/java/com/google/devtools/starlark/Starlark.java
+++ b/src/main/java/com/google/devtools/starlark/Starlark.java
@@ -16,11 +16,11 @@
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.events.EventKind;
-import com.google.devtools.build.lib.syntax.BuildFileAST;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Mutability;
 import com.google.devtools.build.lib.syntax.ParserInput;
 import com.google.devtools.build.lib.syntax.Printer;
+import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -91,7 +91,7 @@
     String line;
     while ((line = prompt()) != null) {
       try {
-        Object result = BuildFileAST.eval(ParserInput.fromLines(line), thread);
+        Object result = StarlarkFile.eval(ParserInput.fromLines(line), thread);
         if (result != null) {
           System.out.println(Printer.repr(result));
         }
@@ -117,7 +117,7 @@
   public int execute(String content) {
     try {
       ParserInput input = ParserInput.create(content, null);
-      BuildFileAST.eval(input, thread);
+      StarlarkFile.eval(input, thread);
       return 0;
     } catch (EvalException e) {
       System.err.println(e.print());
