diff --git a/src/main/java/com/google/devtools/build/docgen/BUILD b/src/main/java/com/google/devtools/build/docgen/BUILD
index cf08d89..9a392d6 100644
--- a/src/main/java/com/google/devtools/build/docgen/BUILD
+++ b/src/main/java/com/google/devtools/build/docgen/BUILD
@@ -71,8 +71,8 @@
 
 java_binary(
     name = "skydoc_bin",
-    srcs = ["SkylarkDocumentationGenerator.java"],
-    main_class = "com.google.devtools.build.docgen.SkylarkDocumentationGenerator",
+    srcs = ["StarlarkDocumentationGenerator.java"],
+    main_class = "com.google.devtools.build.docgen.StarlarkDocumentationGenerator",
     runtime_deps = [
         "//src/main/java/com/google/devtools/build/lib/bazel/repository",
     ],
diff --git a/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java b/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java
index fed07e5..63da67c 100644
--- a/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java
+++ b/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java
@@ -184,7 +184,7 @@
       .build();
 
   // The following variables are not constants as they can be overridden from
-  // SkylarkDocumentationProcessor#parseOptions
+  // StarlarkDocumentationProcessor#parseOptions
 
   // Build Encyclopedia documentation root
   public static String BeDocsRoot = "/versions/master/be";
diff --git a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java b/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java
similarity index 99%
rename from src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java
rename to src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java
index a571a53..99de98b 100644
--- a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java
+++ b/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationCollector.java
@@ -31,7 +31,7 @@
 import javax.annotation.Nullable;
 
 /** A helper class that collects Starlark module documentation. */
-final class SkylarkDocumentationCollector {
+final class StarlarkDocumentationCollector {
   @SkylarkModule(
       name = "globals",
       title = "Globals",
@@ -39,7 +39,7 @@
       doc = "Objects, functions and modules registered in the global environment.")
   private static final class TopLevelModule implements StarlarkValue {}
 
-  private SkylarkDocumentationCollector() {}
+  private StarlarkDocumentationCollector() {}
 
   /** Returns the SkylarkModule annotation for the top-level Starlark module. */
   public static SkylarkModule getTopLevelModule() {
diff --git a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationGenerator.java b/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationGenerator.java
similarity index 88%
rename from src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationGenerator.java
rename to src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationGenerator.java
index 3f819d9..996eeb6 100644
--- a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationGenerator.java
+++ b/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationGenerator.java
@@ -17,7 +17,7 @@
 import java.util.Arrays;
 
 /** The main class for the Starlark documentation generator. */
-public class SkylarkDocumentationGenerator {
+public class StarlarkDocumentationGenerator {
 
   private static boolean checkArgs(String[] args) {
     if (args.length < 1) {
@@ -40,9 +40,8 @@
     if (checkArgs(args)) {
       System.out.println("Generating Starlark documentation...");
       try {
-        SkylarkDocumentationProcessor.generateDocumentation(
-            args[0],
-            Arrays.copyOfRange(args, 1, args.length));
+        StarlarkDocumentationProcessor.generateDocumentation(
+            args[0], Arrays.copyOfRange(args, 1, args.length));
       } catch (Throwable e) {
         fail(e, true);
       }
diff --git a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationProcessor.java b/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationProcessor.java
similarity index 95%
rename from src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationProcessor.java
rename to src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationProcessor.java
index aaf88bb..fbd5a77 100644
--- a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationProcessor.java
+++ b/src/main/java/com/google/devtools/build/docgen/StarlarkDocumentationProcessor.java
@@ -32,7 +32,7 @@
 import java.util.Map;
 
 /** A class to assemble documentation for Starlark. */
-public final class SkylarkDocumentationProcessor {
+public final class StarlarkDocumentationProcessor {
 
   private static final ImmutableList<SkylarkModuleCategory> GLOBAL_CATEGORIES =
       ImmutableList.<SkylarkModuleCategory>of(
@@ -41,7 +41,7 @@
   // Common prefix of packages that may contain Starlark modules.
   @VisibleForTesting static final String MODULES_PACKAGE_PREFIX = "com/google/devtools/build";
 
-  private SkylarkDocumentationProcessor() {}
+  private StarlarkDocumentationProcessor() {}
 
   /** Generates the Starlark documentation to the given output directory. */
   public static void generateDocumentation(String outputDir, String... args)
@@ -49,11 +49,12 @@
     parseOptions(args);
 
     Map<String, StarlarkModuleDoc> modules =
-        SkylarkDocumentationCollector.collectModules(Classpath.findClasses(MODULES_PACKAGE_PREFIX));
+        StarlarkDocumentationCollector.collectModules(
+            Classpath.findClasses(MODULES_PACKAGE_PREFIX));
 
     // Generate the top level module first in the doc
     StarlarkModuleDoc topLevelModule =
-        modules.remove(SkylarkDocumentationCollector.getTopLevelModule().name());
+        modules.remove(StarlarkDocumentationCollector.getTopLevelModule().name());
     writePage(outputDir, topLevelModule);
 
     // Use a LinkedHashMap to preserve ordering of categories, as the output iterates over
@@ -124,7 +125,7 @@
       Map<SkylarkModuleCategory, List<StarlarkModuleDoc>> modulesByCategory) {
     List<StarlarkModuleDoc> topLevelModules =
         modulesByCategory.get(SkylarkModuleCategory.TOP_LEVEL_TYPE);
-    String globalModuleName = SkylarkDocumentationCollector.getTopLevelModule().name();
+    String globalModuleName = StarlarkDocumentationCollector.getTopLevelModule().name();
     for (StarlarkModuleDoc module : topLevelModules) {
       if (module.getName().equals(globalModuleName)) {
         return module;
diff --git a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
index 69457be..ba60ab7 100644
--- a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
+++ b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
@@ -142,7 +142,7 @@
    * in BZL and BUILD files.
    */
   private Map<String, StarlarkModuleDoc> collectTypes() throws ClassPathException {
-    return SkylarkDocumentationCollector.collectModules(
+    return StarlarkDocumentationCollector.collectModules(
         Classpath.findClasses(MODULES_PACKAGE_PREFIX));
   }
 
