diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index d5fb10a..d1acc3b 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -140,7 +140,7 @@
     ],
 )
 
-# Skylark language for configuration files.
+# Starlark language for configuration files.
 #
 # IMPORTANT:  NOT A PUBLIC INTERFACE. TARGETS SHOULDN'T DEPEND ON THIS.
 #
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r15/AndroidNdkCrosstoolsR15.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r15/AndroidNdkCrosstoolsR15.java
index 16a1a14..407ac81 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r15/AndroidNdkCrosstoolsR15.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r15/AndroidNdkCrosstoolsR15.java
@@ -30,7 +30,7 @@
    * release revision. The crosstools are generated through code rather than checked in as a flat
    * file to reduce the amount of templating needed (for parameters like the release name and
    * certain paths), to reduce duplication, and to make it easier to support future versions of the
-   * NDK. TODO(bazel-team): Eventually we should move this into Skylark so the crosstools can be
+   * NDK. TODO(bazel-team): Eventually we should move this into Starlark so the crosstools can be
    * updated independently of Bazel itself.
    *
    * @return A CrosstoolRelease for the Android NDK.
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r18/AndroidNdkCrosstoolsR18.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r18/AndroidNdkCrosstoolsR18.java
index 8448cb6..fa66190 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r18/AndroidNdkCrosstoolsR18.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/r18/AndroidNdkCrosstoolsR18.java
@@ -30,7 +30,7 @@
    * release revision. The crosstools are generated through code rather than checked in as a flat
    * file to reduce the amount of templating needed (for parameters like the release name and
    * certain paths), to reduce duplication, and to make it easier to support future versions of the
-   * NDK. TODO(bazel-team): Eventually we should move this into Skylark so the crosstools can be
+   * NDK. TODO(bazel-team): Eventually we should move this into Starlark so the crosstools can be
    * updated independently of Bazel itself.
    *
    * @return A CrosstoolRelease for the Android NDK.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AdvertisedProviderSet.java b/src/main/java/com/google/devtools/build/lib/packages/AdvertisedProviderSet.java
index b615086..3eb97a9 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AdvertisedProviderSet.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AdvertisedProviderSet.java
@@ -23,7 +23,7 @@
  * Captures the set of providers rules and aspects can advertise. It is either of:
  *
  * <ul>
- *   <li>a set of native and skylark providers
+ *   <li>a set of native and Starlark providers
  *   <li>"can have any provider" set that alias rules have.
  * </ul>
  *
@@ -109,9 +109,7 @@
     return nativeProviders;
   }
 
-  /**
-   * Get all advertised Skylark providers.
-   */
+  /** Get all advertised Starlark providers. */
   public ImmutableSet<SkylarkProviderIdentifier> getSkylarkProviders() {
     return skylarkProviders;
   }
@@ -133,7 +131,7 @@
 
   /**
    * Returns {@code true} if this provider set can have any provider, or if it advertises the
-   * specific skylark provider requested.
+   * specific Starlark provider requested.
    */
   public boolean advertises(SkylarkProviderIdentifier skylarkProvider) {
     if (canHaveAnyProvider()) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Aspect.java b/src/main/java/com/google/devtools/build/lib/packages/Aspect.java
index 3ea8682..b785ab8 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Aspect.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Aspect.java
@@ -43,7 +43,7 @@
    * <p>The native aspects are loaded with blaze and are not stateful. Reference equality works fine
    * in this case.
    *
-   * <p>Caching of Skylark aspects is not yet implemented.
+   * <p>Caching of Starlark aspects is not yet implemented.
    */
   private static final LoadingCache<
           NativeAspectClass, LoadingCache<AspectParameters, AspectDefinition>>
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java b/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java
index e84b66d..a291574 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java
@@ -64,8 +64,8 @@
  *
  * <ul>
  *   <li>{@link AspectClass} is a moniker for "user" definition of the aspect, be it a native aspect
- *       or a Skylark aspect. It contains either a reference to the native class implementing the
- *       aspect or the location of the Skylark definition of the aspect in the source tree, i.e.
+ *       or a Starlark aspect. It contains either a reference to the native class implementing the
+ *       aspect or the location of the Starlark definition of the aspect in the source tree, i.e.
  *       label of .bzl file + symbol name.
  *   <li>{@link AspectParameters} is a (key,value) pair list that can be used to parameterize aspect
  *       classes
@@ -74,8 +74,8 @@
  *   <li>{@link AspectDefinition} is a class encapsulating the aspect definition (what attributes
  *       aspoect has, and along which dependencies does it propagate.
  *   <li>{@link Aspect} is a fully instantiated instance of an Aspect after it is loaded. Getting an
- *       {@code Aspect} from {@code AspectDescriptor} for Skylark aspects requires adding a Skyframe
- *       dependency.
+ *       {@code Aspect} from {@code AspectDescriptor} for Starlark aspects requires adding a
+ *       Skyframe dependency.
  *   <li>{@link com.google.devtools.build.lib.analysis.ConfiguredAspect} represents a result of
  *       application of an {@link Aspect} to a given {@link
  *       com.google.devtools.build.lib.analysis.ConfiguredTarget}.
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
index 35e02b2..6aaa10e 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
@@ -274,7 +274,7 @@
 
     /**
      * Asserts that this aspect can only be evaluated for rules that supply all of the specified
-     * Skylark providers.
+     * Starlark providers.
      */
     public Builder requireSkylarkProviders(SkylarkProviderIdentifier... skylarkProviders) {
       requiredProviders.addSkylarkSet(ImmutableSet.copyOf(skylarkProviders));
@@ -419,7 +419,7 @@
      * configuration.
      *
      * <p>In contrast to {@link #requiresConfigurationFragments(Class...)}, this method takes the
-     * Skylark module names of fragments instead of their classes.
+     * Starlark module names of fragments instead of their classes.
      */
     public Builder requiresConfigurationFragmentsBySkylarkModuleName(
         Collection<String> configurationFragmentNames) {
@@ -434,11 +434,11 @@
      * is also readable by the aspect.
      *
      * <p>In contrast to {@link #requiresConfigurationFragments(ConfigurationTransition, Class...)},
-     * this method takes the Skylark module names of fragments instead of their classes.
+     * this method takes the Starlark module names of fragments instead of their classes.
      *
      * <p>You probably don't want to use this, because aspects generally shouldn't read
-     * configurations other than their own. If you want to declare host config fragments, see
-     * {@link com.google.devtools.build.lib.analysis.config.ConfigAwareAspectBuilder}.
+     * configurations other than their own. If you want to declare host config fragments, see {@link
+     * com.google.devtools.build.lib.analysis.config.ConfigAwareAspectBuilder}.
      */
     public Builder requiresConfigurationFragmentsBySkylarkModuleName(
         ConfigurationTransition transition, Collection<String> configurationFragmentNames) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index 439b8c2..f234aeb 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -201,11 +201,11 @@
     SILENT_RULECLASS_FILTER,
 
     // TODO(bazel-team): This is a hack introduced because of the bad design of the original rules.
-    // Depot cleanup would be too expensive, but don't migrate this to Skylark.
+    // Depot cleanup would be too expensive, but don't migrate this to Starlark.
     /**
-     * Whether to perform analysis time filetype check on this label-type attribute or not.
-     * If the flag is set, we skip the check that applies the allowedFileTypes filter
-     * to generated files. Do not use this if avoidable.
+     * Whether to perform analysis time filetype check on this label-type attribute or not. If the
+     * flag is set, we skip the check that applies the allowedFileTypes filter to generated files.
+     * Do not use this if avoidable.
      */
     SKIP_ANALYSIS_TIME_FILETYPE_CHECK,
 
@@ -480,7 +480,7 @@
 
     /**
      * Sets the property flag of the corresponding name if exists, otherwise throws an Exception.
-     * Only meant to use from Skylark, do not use from Java.
+     * Only meant to use from Starlark, do not use from Java.
      */
     public Builder<TYPE> setPropertyFlag(String propertyName) {
       PropertyFlag flag = null;
@@ -660,7 +660,7 @@
       return this;
     }
 
-    /** See value(TYPE) above. This method is only meant for Skylark usage. */
+    /** See value(TYPE) above. This method is only meant for Starlark usage. */
     public Builder<TYPE> defaultValue(Object defaultValue) throws ConversionException {
       return defaultValue(defaultValue, null, null);
     }
@@ -684,8 +684,8 @@
     }
 
     /**
-     * Sets the attribute default value to a Skylark computed default template. Like a native
-     * Computed Default, this allows a Skylark-defined Rule Class to specify that the default value
+     * Sets the attribute default value to a Starlark computed default template. Like a native
+     * Computed Default, this allows a Starlark-defined Rule Class to specify that the default value
      * of an attribute is a function of other attributes of the Rule.
      *
      * <p>During the loading phase, the computed default template will be specialized for each rule
@@ -717,9 +717,7 @@
       return this;
     }
 
-    /**
-     * Returns where the value of this attribute comes from. Useful only for Skylark.
-     */
+    /** Returns where the value of this attribute comes from. Useful only for Starlark. */
     public AttributeValueSource getValueSource() {
       return valueSource;
     }
@@ -971,13 +969,12 @@
     }
 
     /**
-     * Sets a list of sets of mandatory Skylark providers. Every configured target occurring in
-     * this label type attribute has to provide all the providers from one of those sets,
-     * or be one of {@link #allowedRuleClasses}, otherwise an error is produced during
-     * the analysis phase.
+     * Sets a list of sets of mandatory Starlark providers. Every configured target occurring in
+     * this label type attribute has to provide all the providers from one of those sets, or be one
+     * of {@link #allowedRuleClasses}, otherwise an error is produced during the analysis phase.
      */
     public Builder<TYPE> mandatoryProvidersList(
-        Iterable<? extends Iterable<SkylarkProviderIdentifier>> providersList){
+        Iterable<? extends Iterable<SkylarkProviderIdentifier>> providersList) {
       Preconditions.checkState(type.getLabelClass() == LabelClass.DEPENDENCY,
           "must be a label-valued type");
       for (Iterable<SkylarkProviderIdentifier> providers : providersList) {
@@ -1134,7 +1131,7 @@
     /**
      * Creates the attribute. Uses type, optionality, configuration type and the default value
      * configured by the builder. Use the name passed as an argument. This function is used by
-     * Skylark where the name is provided only when we build. We don't want to modify the builder,
+     * Starlark where the name is provided only when we build. We don't want to modify the builder,
      * as it is shared in a multithreaded environment.
      */
     public Attribute build(String name) {
@@ -1197,7 +1194,7 @@
    *
    * <p>The {@code TComputeException} type parameter allows the two specializations of this class to
    * describe whether and how their computations throw. For natively defined computed defaults,
-   * computation does not throw, but for Skylark-defined computed defaults, computation may throw
+   * computation does not throw, but for Starlark-defined computed defaults, computation may throw
    * {@link InterruptedException}.
    */
   private abstract static class ComputationStrategy<TComputeException extends Exception> {
@@ -1370,7 +1367,7 @@
   }
 
   /**
-   * A Skylark-defined computed default, which can be precomputed for a specific {@link Rule} by
+   * A Starlark-defined computed default, which can be precomputed for a specific {@link Rule} by
    * calling {@link #computePossibleValues}, which returns a {@link SkylarkComputedDefault} that
    * contains a lookup table.
    */
@@ -1504,10 +1501,10 @@
   }
 
   /**
-   * A class for computed attributes defined in Skylark.
+   * A class for computed attributes defined in Starlark.
    *
    * <p>Unlike {@link ComputedDefault}, instances of this class contain a pre-computed table of all
-   * possible assignments of depended-on attributes and what the Skylark function evaluates to, and
+   * possible assignments of depended-on attributes and what the Starlark function evaluates to, and
    * {@link #getPossibleValues(Type, Rule)} and {@link #getDefault(AttributeMap)} do lookups in that
    * table.
    */
@@ -1977,9 +1974,9 @@
   }
 
   /**
-   * Returns the public name of this attribute. This is the name we use in Skylark code
-   * and we can use it to display to the end-user.
-   * Implicit and late-bound attributes start with '_' (instead of '$' or ':').
+   * Returns the public name of this attribute. This is the name we use in Starlark code and we can
+   * use it to display to the end-user. Implicit and late-bound attributes start with '_' (instead
+   * of '$' or ':').
    */
   public String getPublicName() {
     return getSkylarkName(getName());
@@ -2291,15 +2288,15 @@
     return name.startsWith(":");
   }
 
-  /** Returns whether this attribute is considered private in Skylark. */
+  /** Returns whether this attribute is considered private in Starlark. */
   private static boolean isPrivateAttribute(String nativeAttrName) {
     return isLateBound(nativeAttrName) || isImplicit(nativeAttrName);
   }
 
   /**
-   * Returns the Skylark-usable name of this attribute.
+   * Returns the Starlark-usable name of this attribute.
    *
-   * Implicit and late-bound attributes start with '_' (instead of '$' or ':').
+   * <p>Implicit and late-bound attributes start with '_' (instead of '$' or ':').
    */
   public static String getSkylarkName(String nativeAttrName) {
     if (isPrivateAttribute(nativeAttrName)) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AttributeValueSource.java b/src/main/java/com/google/devtools/build/lib/packages/AttributeValueSource.java
index c95e642..b985f16 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AttributeValueSource.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AttributeValueSource.java
@@ -30,10 +30,10 @@
   private final boolean mustHaveSkylarkPrefix;
 
   /**
-   * Creates a new instance and defines the prefixes for both Skylark and native.
+   * Creates a new instance and defines the prefixes for both Starlark and native.
    *
    * @param nativePrefix The prefix when converted to a native attribute name.
-   * @param mustHaveSkylarkPrefix Whether the Skylark name must start with {@link
+   * @param mustHaveSkylarkPrefix Whether the Starlark name must start with {@link
    *     AttributeValueSource#SKYLARK_PREFIX}.
    */
   AttributeValueSource(String nativePrefix, boolean mustHaveSkylarkPrefix) {
@@ -41,7 +41,7 @@
     this.mustHaveSkylarkPrefix = mustHaveSkylarkPrefix;
   }
 
-  /** Throws an {@link EvalException} if the given Skylark name is not valid for this type. */
+  /** Throws an {@link EvalException} if the given Starlark name is not valid for this type. */
   public void validateSkylarkName(String attrSkylarkName) throws EvalException {
     if (attrSkylarkName.isEmpty()) {
       throw new EvalException(null, "Attribute name must not be empty.");
@@ -58,8 +58,8 @@
   }
 
   /**
-   * Converts the given Skylark attribute name to a native attribute name for this type, or throws
-   * an {@link EvalException} if the given Skylark name is not valid for this type.
+   * Converts the given Starlark attribute name to a native attribute name for this type, or throws
+   * an {@link EvalException} if the given Starlark name is not valid for this type.
    */
   public String convertToNativeName(String attrSkylarkName) throws EvalException {
     validateSkylarkName(attrSkylarkName);
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BuildType.java b/src/main/java/com/google/devtools/build/lib/packages/BuildType.java
index 65fafb6..3df8bfe 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BuildType.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/BuildType.java
@@ -289,7 +289,7 @@
 
   /**
    * Dictionary type specialized for label keys, which is able to detect collisions caused by the
-   * fact that labels have multiple equivalent representations in Skylark code.
+   * fact that labels have multiple equivalent representations in Starlark code.
    */
   private static class LabelKeyedDictType<ValueT> extends DictType<Label, ValueT> {
     private LabelKeyedDictType(Type<ValueT> valueType) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index a12e242..f1ca37a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -165,9 +165,7 @@
    */
   private boolean containsErrors;
 
-  /**
-   * The list of transitive closure of the Skylark file dependencies.
-   */
+  /** The list of transitive closure of the Starlark file dependencies. */
   private ImmutableList<Label> skylarkFileDependencies;
 
   /** The package's default "applicable_licenses" attribute. */
@@ -447,9 +445,7 @@
         || baseFileName.equals(LabelConstants.WORKSPACE_FILE_NAME.getPathString());
   }
 
-  /**
-   * Returns the list of transitive closure of the Skylark file dependencies of this package.
-   */
+  /** Returns the list of transitive closure of the Starlark file dependencies of this package. */
   public ImmutableList<Label> getSkylarkFileDependencies() {
     return skylarkFileDependencies;
   }
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 79846fd..2181705 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
@@ -606,7 +606,7 @@
   private final ClassObject nativeModule;
   private final ClassObject workspaceNativeModule;
 
-  /** @return the Skylark struct to bind to "native" */
+  /** @return the Starlark struct to bind to "native" */
   public ClassObject getNativeModule(boolean workspace) {
     return workspace ? workspaceNativeModule : nativeModule;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Provider.java b/src/main/java/com/google/devtools/build/lib/packages/Provider.java
index f35eac8..be4fc42 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Provider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Provider.java
@@ -21,11 +21,11 @@
 /**
  * Declared Provider (a constructor for {@link Info}).
  *
- * <p>Declared providers can be declared either natively ({@link NativeProvider} or in Skylark
+ * <p>Declared providers can be declared either natively ({@link NativeProvider} or in Starlark
  * {@link SkylarkProvider}.
  *
  * <p>{@link Provider} serves both as "type identifier" for declared provider instances and as a
- * function that can be called to construct a provider. To the Skylark user, there are "providers"
+ * function that can be called to construct a provider. To the Starlark user, there are "providers"
  * and "provider instances"; the former is a Java instance of this class, and the latter is a Java
  * instance of {@link Info}.
  *
@@ -36,8 +36,8 @@
 public interface Provider extends ProviderApi {
 
   /**
-   * Has this {@link Provider} been exported? All native providers are always exported. Skylark
-   * providers are exported if they are assigned to top-level name in a Skylark module.
+   * Has this {@link Provider} been exported? All native providers are always exported. Starlark
+   * providers are exported if they are assigned to top-level name in a Starlark module.
    */
   boolean isExported();
 
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkProvider.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkProvider.java
index b18796d..09ac35a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkProvider.java
@@ -33,7 +33,7 @@
 /**
  * A provider defined in Starlark rather than in native code.
  *
- * <p>This is a result of calling the {@code provider()} function from Skylark ({@link
+ * <p>This is a result of calling the {@code provider()} function from Starlark ({@link
  * com.google.devtools.build.lib.analysis.skylark.SkylarkRuleClassFunctions#provider}).
  *
  * <p>{@code SkylarkProvider}s may be either schemaless or schemaful. Instances of schemaless
@@ -71,7 +71,7 @@
    *
    * <p>The resulting object needs to be exported later (via {@link #export}).
    *
-   * @param location the location of the Skylark definition for this provider (tests may use {@link
+   * @param location the location of the Starlark definition for this provider (tests may use {@link
    *     Location#BUILTIN})
    */
   public static SkylarkProvider createUnexportedSchemaless(Location location) {
@@ -84,7 +84,7 @@
    * <p>The resulting object needs to be exported later (via {@link #export}).
    *
    * @param fields the allowed field names for instances of this provider
-   * @param location the location of the Skylark definition for this provider (tests may use {@link
+   * @param location the location of the Starlark definition for this provider (tests may use {@link
    *     Location#BUILTIN})
    */
   // TODO(adonovan): in what sense is this "schemaful" if fields is null?
@@ -98,7 +98,7 @@
    * Creates an exported {@link SkylarkProvider} with no schema.
    *
    * @param key the key that identifies this provider
-   * @param location the location of the Skylark definition for this provider (tests may use {@link
+   * @param location the location of the Starlark definition for this provider (tests may use {@link
    *     Location#BUILTIN})
    */
   public static SkylarkProvider createExportedSchemaless(SkylarkKey key, Location location) {
@@ -110,7 +110,7 @@
    *
    * @param key the key that identifies this provider
    * @param fields the allowed field names for instances of this provider
-   * @param location the location of the Skylark definition for this provider (tests may use {@link
+   * @param location the location of the Starlark definition for this provider (tests may use {@link
    *     Location#BUILTIN})
    */
   // TODO(adonovan): in what sense is this "schemaful" if fields is null?
@@ -251,7 +251,7 @@
   }
 
   /**
-   * A serializable representation of Skylark-defined {@link SkylarkProvider} that uniquely
+   * A serializable representation of Starlark-defined {@link SkylarkProvider} that uniquely
    * identifies all {@link SkylarkProvider}s that are exposed to SkyFrame.
    */
   @AutoCodec
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
index 1c7b062..c79a346 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
@@ -50,8 +50,8 @@
  *       SkylarkSemanticsConsistencyTest#buildRandomSemantics}.
  *   <li>Update manual documentation in site/docs/skylark/backward-compatibility.md. Also remember
  *       to update this when flipping a flag's default value.
- *   <li>Boolean semantic flags can toggle Skylark methods on or off. To do this, add a new entry to
- *       {@link StarlarkSemantics#FlagIdentifier}. Then, specify the identifier in {@code
+ *   <li>Boolean semantic flags can toggle Starlark methods on or off. To do this, add a new entry
+ *       to {@link StarlarkSemantics#FlagIdentifier}. Then, specify the identifier in {@code
  *       SkylarkCallable.enableOnlyWithFlag} or {@code SkylarkCallable.disableWithFlag}.
  * </ul>
  *
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java b/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java
index 921e9ec..762c0ee 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StructImpl.java
@@ -56,7 +56,7 @@
    * Constructs an {@link StructImpl}.
    *
    * @param provider the provider describing the type of this instance
-   * @param location the Skylark location where this instance is created. If null, defaults to
+   * @param location the Starlark location where this instance is created. If null, defaults to
    *     {@link Location#BUILTIN}.
    */
   protected StructImpl(Provider provider, @Nullable Location location) {
@@ -141,8 +141,8 @@
   }
 
   /**
-   * Convert the object to string using Skylark syntax. The output tries to be reversible (but there
-   * is no guarantee, it depends on the actual values).
+   * Convert the object to string using Starlark syntax. The output tries to be reversible (but
+   * there is no guarantee, it depends on the actual values).
    */
   @Override
   public void repr(Printer printer) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
index c6948b0..560b4ba 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
@@ -35,7 +35,7 @@
 @Immutable
 public class ConfigFeatureFlagProvider extends NativeInfo implements ConfigFeatureFlagProviderApi {
 
-  /** Name used in Skylark for accessing ConfigFeatureFlagProvider. */
+  /** Name used in Starlark for accessing ConfigFeatureFlagProvider. */
   static final String SKYLARK_NAME = "FeatureFlagInfo";
 
   /**
@@ -63,7 +63,7 @@
   }
 
   /**
-   * A constructor callable from Skylark for OutputGroupInfo: {@code
+   * A constructor callable from Starlark for OutputGroupInfo: {@code
    * config_common.FeatureFlagInfo(value="...")}
    */
   @SkylarkModule(name = "FeatureFlagInfo", documented = false)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSkylarkCommon.java
index df97359..8515c59 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSkylarkCommon.java
@@ -17,9 +17,7 @@
 import com.google.devtools.build.lib.packages.Provider;
 import com.google.devtools.build.lib.skylarkbuildapi.config.ConfigSkylarkCommonApi;
 
-/**
- * Skylark namespace used to interact with Blaze's configurability APIs.
- */
+/** Starlark namespace used to interact with Blaze's configurability APIs. */
 public class ConfigSkylarkCommon implements ConfigSkylarkCommonApi {
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java
index 790ba5b..15c227f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java
@@ -126,7 +126,7 @@
   @Override
   public abstract boolean getAlwayslink();
 
-  // TODO(plf): This is just needed for Go, do not expose to Skylark and try to remove it. This was
+  // TODO(plf): This is just needed for Go, do not expose to Starlark and try to remove it. This was
   // introduced to let a linker input declare that it needs debug info in the executable.
   // Specifically, this was introduced for linking Go into a C++ binary when using the gccgo
   // compiler.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/BazelProtoLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/proto/BazelProtoLibraryRule.java
index 3da4c65..c11cb06 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/proto/BazelProtoLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/proto/BazelProtoLibraryRule.java
@@ -136,7 +136,7 @@
 
 <p>It only contains information about the <code>.proto</code> files directly mentioned by a
 <code>proto_library</code> rule; the collection of transitive descriptor sets is available through
-the <code>[ProtoInfo].transitive_descriptor_sets</code> Skylark provider.
+the <code>[ProtoInfo].transitive_descriptor_sets</code> Starlark provider.
 See documentation in <code>ProtoInfo.java</code>.</p>
 
 <p>Recommended code organization:</p>
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
index 3954b69..57c4c84 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
@@ -120,7 +120,7 @@
   }
 
   /**
-   * Load Skylark-defined aspect from an extension file. Is to be called from a SkyFunction.
+   * Load Starlark-defined aspect from an extension file. Is to be called from a SkyFunction.
    *
    * @return {@code null} if dependencies cannot be satisfied.
    * @throws AspectCreationException if the value loaded is not a {@link SkylarkDefinedAspect}.
@@ -147,7 +147,7 @@
   }
 
   /**
-   * Load Skylark aspect from an extension file. Is to be called from a SkyFunction.
+   * Load Starlark aspect from an extension file. Is to be called from a SkyFunction.
    *
    * @return {@code null} if dependencies cannot be satisfied.
    */
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ErrorReadingSkylarkExtensionException.java b/src/main/java/com/google/devtools/build/lib/skyframe/ErrorReadingSkylarkExtensionException.java
index f459aea..77e2de1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ErrorReadingSkylarkExtensionException.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ErrorReadingSkylarkExtensionException.java
@@ -16,7 +16,7 @@
 import com.google.devtools.build.lib.packages.BuildFileNotFoundException;
 import java.io.IOException;
 
-/** Indicates some sort of IO error while dealing with a Skylark extension. */
+/** Indicates some sort of IO error while dealing with a Starlark extension. */
 public class ErrorReadingSkylarkExtensionException extends Exception {
   public ErrorReadingSkylarkExtensionException(BuildFileNotFoundException e) {
     super(e.getMessage(), e);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
index 5fabef0..cdd2352 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
@@ -99,7 +99,7 @@
      * the following circumstances:
      *
      * <ol>
-     *   <li>The BUILD file contains a Skylark load statement that is in error
+     *   <li>The BUILD file contains a Starlark load statement that is in error
      *   <li>TODO(mschaller), not yet implemented: The BUILD file is a symlink that points into a
      *       cycle
      * </ol>
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelSkylarkAspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelSkylarkAspectFunction.java
index 6878d4a..90636b6 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelSkylarkAspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelSkylarkAspectFunction.java
@@ -26,11 +26,11 @@
 import javax.annotation.Nullable;
 
 /**
- * SkyFunction to load aspects from Skylark extensions and calculate their values.
+ * SkyFunction to load aspects from Starlark extensions and calculate their values.
  *
- * Used for loading top-level aspects. At top level, in
- * {@link com.google.devtools.build.lib.analysis.BuildView}, we cannot invoke two SkyFunctions
- * one after another, so BuildView calls this function to do the work.
+ * <p>Used for loading top-level aspects. At top level, in {@link
+ * com.google.devtools.build.lib.analysis.BuildView}, we cannot invoke two SkyFunctions one after
+ * another, so BuildView calls this function to do the work.
  */
 public class ToplevelSkylarkAspectFunction implements SkyFunction {
   ToplevelSkylarkAspectFunction() {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleFunctionsApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleFunctionsApi.java
index 40a4c24..33abf1d 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleFunctionsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleFunctionsApi.java
@@ -32,7 +32,8 @@
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 
 /**
- * Interface for a global Skylark library containing rule-related helper and registration functions.
+ * Interface for a global Starlark library containing rule-related helper and registration
+ * functions.
  */
 @SkylarkGlobalLibrary
 public interface SkylarkRuleFunctionsApi<FileApiT extends FileApi> {
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/BUILD b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/BUILD
index f2c1a59..ac7b88e 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/BUILD
@@ -1,9 +1,9 @@
 # Description:
-#   This package contains interfaces representing the skylark "build API"
+#   This package contains interfaces representing the Starlark "build API"
 #   (but not the implementation of that API). Ultimately, this package
 #   may be broken out of the Bazel package hierarchy to be standalone.
 #   Thus, this package should not depend on Bazel-specific packages (only
-#   those which contain pure-Skylark concepts, such as the interpreter or
+#   those which contain pure-Starlark concepts, such as the interpreter or
 #   annotation interfaces).
 
 load("@rules_java//java:defs.bzl", "java_library")
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkOSApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkOSApi.java
index e8de6f9..e67b4de 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkOSApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository/SkylarkOSApi.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.syntax.StarlarkValue;
 
-/** A Skylark structure to deliver information about the system we are running on. */
+/** A Starlark structure to deliver information about the system we are running on. */
 @SkylarkModule(
     name = "repository_os",
     category = SkylarkModuleCategory.BUILTIN,
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java b/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java
index ad8a597..9dd13af 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StringModule.java
@@ -30,9 +30,9 @@
 import java.util.regex.Pattern;
 
 /**
- * Skylark String module.
+ * Starlark String module.
  *
- * <p>This module has special treatment in Skylark, as its methods represent methods represent for
+ * <p>This module has special treatment in Starlark, as its methods represent methods represent for
  * any 'string' objects in the language.
  *
  * <p>Methods of this class annotated with {@link SkylarkCallable} must have a positional-only
