diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java
index 41762bf..9dec16d 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java
@@ -40,7 +40,7 @@
 import com.google.devtools.build.lib.rules.java.JavaRuleClasses.JavaToolchainBaseRule;
 import com.google.devtools.build.lib.rules.java.JavaRuntimeAliasRule;
 import com.google.devtools.build.lib.rules.java.JavaRuntimeRule;
-import com.google.devtools.build.lib.rules.java.JavaSkylarkCommon;
+import com.google.devtools.build.lib.rules.java.JavaStarlarkCommon;
 import com.google.devtools.build.lib.rules.java.JavaToolchainAliasRule;
 import com.google.devtools.build.lib.rules.java.JavaToolchainRule;
 import com.google.devtools.build.lib.rules.java.ProguardLibraryRule;
@@ -91,7 +91,7 @@
 
     builder.addSkylarkBootstrap(
         new JavaBootstrap(
-            new JavaSkylarkCommon(BazelJavaSemantics.INSTANCE),
+            new JavaStarlarkCommon(BazelJavaSemantics.INSTANCE),
             JavaInfo.PROVIDER,
             new JavaProtoSkylarkCommon(),
             JavaCcLinkParamsProvider.PROVIDER));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidApplicationResourceInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidApplicationResourceInfo.java
index 4d78cf9..8f4d8a1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidApplicationResourceInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidApplicationResourceInfo.java
@@ -13,7 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.rules.android;
 
-import static com.google.devtools.build.lib.rules.android.AndroidSkylarkData.fromNoneable;
+import static com.google.devtools.build.lib.rules.android.AndroidStarlarkData.fromNoneable;
 
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
index 459efca..3f43c4c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
@@ -13,7 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.rules.android;
 
-import static com.google.devtools.build.lib.rules.android.AndroidSkylarkData.fromNoneable;
+import static com.google.devtools.build.lib.rules.android.AndroidStarlarkData.fromNoneable;
 
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.actions.Artifact;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
index d9eeb4e..ac1af62 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
@@ -13,7 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.rules.android;
 
-import static com.google.devtools.build.lib.rules.android.AndroidSkylarkData.fromNoneable;
+import static com.google.devtools.build.lib.rules.android.AndroidStarlarkData.fromNoneable;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableCollection;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
index 3ad20a6..8b3a1d8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
@@ -13,7 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.rules.android;
 
-import static com.google.devtools.build.lib.rules.android.AndroidSkylarkData.fromNoneable;
+import static com.google.devtools.build.lib.rules.android.AndroidStarlarkData.fromNoneable;
 
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.FilesToRunProvider;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkData.java
similarity index 98%
rename from src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
rename to src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkData.java
index ef74036..00cc31e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkData.java
@@ -56,7 +56,7 @@
 import javax.annotation.Nullable;
 
 /** Starlark-visible methods for working with Android data (manifests, resources, and assets). */
-public abstract class AndroidSkylarkData
+public abstract class AndroidStarlarkData
     implements AndroidDataProcessingApi<
         AndroidDataContext,
         ConfiguredTarget,
@@ -396,7 +396,7 @@
 
   /**
    * Helper method to get default {@link
-   * com.google.devtools.build.lib.rules.android.AndroidSkylarkData.BinaryDataSettings}.
+   * AndroidStarlarkData.BinaryDataSettings}.
    */
   private BinaryDataSettings defaultBinaryDataSettings(AndroidDataContext ctx)
       throws EvalException {
@@ -621,8 +621,8 @@
   /**
    * Converts a "Noneable" Object passed by Starlark to an nullable object of the appropriate type.
    *
-   * <p>Skylark "Noneable" types are passed in as an Object that may be either the correct type or a
-   * Starlark.NONE object. Starlark will handle type checking, based on the appropriate @param
+   * <p>Starlark "Noneable" types are passed in as an Object that may be either the correct type or
+   * a Starlark.NONE object. Starlark will handle type checking, based on the appropriate @param
    * annotation, but we still need to do the actual cast (or conversion to null) ourselves.
    *
    * @param object the Noneable object
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java b/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java
index f5a0ca2..d1bdcd5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java
@@ -13,7 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.rules.android.databinding;
 
-import static com.google.devtools.build.lib.rules.android.AndroidSkylarkData.fromNoneable;
+import static com.google.devtools.build.lib.rules.android.AndroidStarlarkData.fromNoneable;
 
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.actions.Artifact;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
index 3bc7d61..fa3929d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
@@ -27,8 +27,8 @@
         "JavaRuntimeAliasRule.java",
         "JavaRuntimeClasspathProvider.java",
         "JavaRuntimeRule.java",
-        "JavaSkylarkCommon.java",
         "JavaSourceInfoProvider.java",
+        "JavaStarlarkCommon.java",
         "JavaToolchain.java",
         "JavaToolchainAliasRule.java",
         "JavaToolchainRule.java",
@@ -127,9 +127,9 @@
         "JavaRuntimeInfo.java",
         "JavaSemantics.java",
         "JavaSkylarkApiProvider.java",
-        "JavaSkylarkCommon.java",
         "JavaSourceInfoProvider.java",
         "JavaSourceJarsProvider.java",
+        "JavaStarlarkCommon.java",
         "JavaStrictCompilationArgsProvider.java",
         "JavaTargetAttributes.java",
         "JavaToolchainProvider.java",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
similarity index 98%
rename from src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
rename to src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
index e12a4fa..76f0f31 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
@@ -32,7 +32,7 @@
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 
 /** A module that contains Starlark utilities for Java support. */
-public class JavaSkylarkCommon
+public class JavaStarlarkCommon
     implements JavaCommonApi<
         Artifact,
         JavaInfo,
@@ -43,7 +43,7 @@
         SkylarkActionFactory> {
   private final JavaSemantics javaSemantics;
 
-  public JavaSkylarkCommon(JavaSemantics javaSemantics) {
+  public JavaStarlarkCommon(JavaSemantics javaSemantics) {
     this.javaSemantics = javaSemantics;
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java
index 7457c9b..4eabb42 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java
@@ -79,7 +79,7 @@
   }
 
   private void writeBasicTestFiles() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
     getAnalysisMock().ccSupport().setupCcToolchainConfigForCpu(mockToolsConfig, "armeabi-v7a");
     scratch.file(
@@ -116,7 +116,7 @@
 
   @Test
   public void testSplitAttrDoesNotIncludeStarlarkSplit() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
     scratch.file(
         "test/skylark/rules.bzl",
@@ -162,7 +162,7 @@
 
   @Test
   public void testAccessStarlarkSplitThrowsError() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
     scratch.file(
         "test/skylark/rules.bzl",
@@ -220,7 +220,7 @@
 
   @Test
   public void testTargetAndRuleNotInWhitelist() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
     getAnalysisMock().ccSupport().setupCcToolchainConfigForCpu(mockToolsConfig, "armeabi-v7a");
     scratch.file(
@@ -288,7 +288,7 @@
   }
 
   private void writeReadSettingsTestFiles() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
 
     scratch.file(
@@ -338,7 +338,7 @@
   }
 
   private void writeOptionConversionTestFiles() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
 
     scratch.file(
@@ -388,7 +388,7 @@
 
   @Test
   public void testUndeclaredOptionKey() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
 
     scratch.file(
@@ -421,7 +421,7 @@
 
   @Test
   public void testDeclaredOutputNotReturned() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
 
     scratch.file(
@@ -458,7 +458,7 @@
 
   @Test
   public void testSettingsContainOnlyInputs() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
 
     scratch.file(
@@ -495,7 +495,7 @@
 
   @Test
   public void testInvalidInputKey() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
 
     scratch.file(
@@ -530,7 +530,7 @@
 
   @Test
   public void testInvalidNativeOptionInput() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
 
     scratch.file(
@@ -566,7 +566,7 @@
 
   @Test
   public void testInvalidNativeOptionOutput() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
 
     scratch.file(
@@ -601,7 +601,7 @@
 
   @Test
   public void testInvalidOutputKey() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
 
     scratch.file(
@@ -636,7 +636,7 @@
 
   @Test
   public void testInvalidOptionValue() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
 
     scratch.file(
@@ -669,7 +669,7 @@
 
   @Test
   public void testDuplicateOutputs() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
 
     scratch.file(
@@ -762,7 +762,7 @@
   @Test
   public void testCannotTransitionWithoutFlag() throws Exception {
     writeBasicTestFiles();
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=false");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=false");
 
     reporter.removeHandler(failFastHandler);
     getConfiguredTarget("//test/skylark:test");
@@ -813,7 +813,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_fromDefault() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api=true");
     writeWhitelistFile();
     writeBuildSettingsBzl();
@@ -841,7 +841,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_fromCommandLine() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api=true");
     writeWhitelistFile();
     writeBuildSettingsBzl();
@@ -1506,7 +1506,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_badValue() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_build_setting_api=true", "--experimental_starlark_config_transitions");
     writeWhitelistFile();
     writeBuildSettingsBzl();
@@ -1560,7 +1560,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_noSuchTarget() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_build_setting_api=true", "--experimental_starlark_config_transitions");
     writeWhitelistFile();
     writeRulesWithAttrTransitionBzl();
@@ -1582,7 +1582,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_notABuildSetting() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_build_setting_api=true", "--experimental_starlark_config_transitions");
     writeWhitelistFile();
     writeRulesWithAttrTransitionBzl();
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkRuleTransitionProviderTest.java b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkRuleTransitionProviderTest.java
index 2eb4151..9f7bfcf 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkRuleTransitionProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkRuleTransitionProviderTest.java
@@ -217,7 +217,7 @@
 
   @Test
   public void testBuildSettingCannotTransition() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=true");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=true");
     writeWhitelistFile();
     scratch.file(
         "test/transitions.bzl",
@@ -436,7 +436,7 @@
 
   @Test
   public void testCannotTransitionOnBuildSettingWithoutFlag() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=false", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -456,7 +456,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_fromDefault() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -480,7 +480,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_fromCommandLine() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -506,7 +506,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_badValue() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -529,7 +529,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_noSuchTarget() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -551,7 +551,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_noSuchPackage() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -571,7 +571,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_notABuildSetting() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     writeWhitelistFile();
     scratch.file(
@@ -617,7 +617,7 @@
 
   @Test
   public void testTransitionOnBuildSetting_dontStoreDefault() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -639,7 +639,7 @@
 
   @Test
   public void testTransitionReadsBuildSetting_fromDefault() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -663,7 +663,7 @@
 
   @Test
   public void testTransitionReadsBuildSetting_fromCommandLine() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -689,7 +689,7 @@
 
   @Test
   public void testTransitionReadsBuildSetting_notABuildSetting() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     writeWhitelistFile();
     scratch.file(
@@ -735,7 +735,7 @@
 
   @Test
   public void testTransitionReadsBuildSetting_noSuchTarget() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -757,7 +757,7 @@
 
   @Test
   public void testAliasedBuildSetting() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -793,7 +793,7 @@
 
   @Test
   public void testAliasedBuildSetting_chainedAliases() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -830,7 +830,7 @@
 
   @Test
   public void testAliasedBuildSetting_configuredActualValue() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -876,7 +876,7 @@
 
   @Test
   public void testAliasedBuildSetting_cyclicalAliases() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -903,7 +903,7 @@
 
   @Test
   public void testAliasedBuildSetting_setAliasAndActual() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -939,7 +939,7 @@
 
   @Test
   public void testAliasedBuildSetting_outputReturnMismatch() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_starlark_config_transitions=true", "--experimental_build_setting_api");
     scratch.file(
         "test/transitions.bzl",
@@ -973,7 +973,7 @@
 
   @Test
   public void testOneParamTransitionFunctionApiFails() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
     writeWhitelistFile();
     scratch.file(
         "test/transitions.bzl",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/platform/PlatformInfoTest.java b/src/test/java/com/google/devtools/build/lib/analysis/platform/PlatformInfoTest.java
index 0660075..5ebc160 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/platform/PlatformInfoTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/platform/PlatformInfoTest.java
@@ -352,7 +352,7 @@
         "    ],",
         ")");
 
-    setSkylarkSemanticsOptions("--experimental_platforms_api");
+    setStarlarkSemanticsOptions("--experimental_platforms_api");
     ConfiguredTarget platform = getConfiguredTarget("//test/platform:custom");
     assertThat(platform).isNotNull();
 
@@ -411,7 +411,7 @@
         "    ],",
         ")");
 
-    setSkylarkSemanticsOptions("--experimental_platforms_api");
+    setStarlarkSemanticsOptions("--experimental_platforms_api");
     ConfiguredTarget platform = getConfiguredTarget("//test/platform:custom");
     assertThat(platform).isNotNull();
 
@@ -453,7 +453,7 @@
         "constraint_value(name = 'foo',",
         "    constraint_setting = ':basic',",
         ")");
-    setSkylarkSemanticsOptions("--experimental_platforms_api");
+    setStarlarkSemanticsOptions("--experimental_platforms_api");
     checkError(
         "test/platform",
         "custom",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index eff5317..ee473ba 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -257,7 +257,7 @@
     initializeMockClient();
 
     packageOptions = parsePackageOptions();
-    starlarkSemanticsOptions = parseSkylarkSemanticsOptions();
+    starlarkSemanticsOptions = parseStarlarkSemanticsOptions();
     workspaceStatusActionFactory = new AnalysisTestUtil.DummyWorkspaceStatusActionFactory();
     mutableActionGraph = new MapBasedActionGraph(actionKeyContext);
     ruleClassProvider = getRuleClassProvider();
@@ -352,7 +352,7 @@
     return ImmutableList.<EnvironmentExtension>of();
   }
 
-  protected StarlarkSemantics getSkylarkSemantics() {
+  protected StarlarkSemantics getStarlarkSemantics() {
     return starlarkSemanticsOptions.toSkylarkSemantics();
   }
 
@@ -458,8 +458,8 @@
     setUpSkyframe();
   }
 
-  protected void setSkylarkSemanticsOptions(String... options) throws Exception {
-    starlarkSemanticsOptions = parseSkylarkSemanticsOptions(options);
+  protected void setStarlarkSemanticsOptions(String... options) throws Exception {
+    starlarkSemanticsOptions = parseStarlarkSemanticsOptions(options);
     setUpSkyframe();
   }
 
@@ -470,7 +470,7 @@
     return parser.getOptions(PackageOptions.class);
   }
 
-  private static StarlarkSemanticsOptions parseSkylarkSemanticsOptions(String... options)
+  private static StarlarkSemanticsOptions parseStarlarkSemanticsOptions(String... options)
       throws Exception {
     OptionsParser parser =
         OptionsParser.builder().optionsClasses(StarlarkSemanticsOptions.class).build();
@@ -671,7 +671,7 @@
    * Creates and returns a rule context to use for Starlark tests that is equivalent to the one that
    * was used to create the given configured target.
    */
-  protected RuleContext getRuleContextForSkylark(ConfiguredTarget target) throws Exception {
+  protected RuleContext getRuleContextForStarlark(ConfiguredTarget target) throws Exception {
     // TODO(bazel-team): we need this horrible workaround because CachingAnalysisEnvironment
     // only works with StoredErrorEventListener despite the fact it accepts the interface
     // ErrorEventListener, so it's not possible to create it with reporter.
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java
index 515ece3..f94c54a 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java
@@ -55,7 +55,7 @@
 
   @Before
   public void setUp() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_ninja_actions");
+    setStarlarkSemanticsOptions("--experimental_ninja_actions");
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
index c134930..e3a4470 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
@@ -51,7 +51,7 @@
 
   @Before
   public void setUp() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_ninja_actions");
+    setStarlarkSemanticsOptions("--experimental_ninja_actions");
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/rules/LabelBuildSettingTest.java b/src/test/java/com/google/devtools/build/lib/rules/LabelBuildSettingTest.java
index d2d87db..1eea468 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/LabelBuildSettingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/LabelBuildSettingTest.java
@@ -29,7 +29,7 @@
 public class LabelBuildSettingTest extends BuildViewTestCase {
 
   private void writeRulesBzl(String type) throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=True");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=True");
 
     scratch.file(
         "test/rules.bzl",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
index aacd75b..497671a 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
@@ -93,7 +93,7 @@
         "java/android/res/values/strings.xml",
         "<resources><string name = 'hello'>Hello Android!</string></resources>");
     scratch.file("java/android/A.java", "package android; public class A {};");
-    setSkylarkSemanticsOptions("--experimental_google_legacy_api");
+    setStarlarkSemanticsOptions("--experimental_google_legacy_api");
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceTest.java
index 9fad94d..9453b20 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDeviceTest.java
@@ -69,7 +69,7 @@
         "        'android_21/x86/userdata.img.tar.gz'",
         "    ],",
         ")");
-    setSkylarkSemanticsOptions("--experimental_google_legacy_api");
+    setStarlarkSemanticsOptions("--experimental_google_legacy_api");
   }
 
   private FilesToRunProvider getToolDependency(String label) throws Exception {
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
index cbaae7a..94e3785 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
@@ -92,7 +92,7 @@
         "  ],",
         ")");
     setupTargetDevice();
-    setSkylarkSemanticsOptions("--experimental_google_legacy_api");
+    setStarlarkSemanticsOptions("--experimental_google_legacy_api");
   }
 
   // TODO(ajmichael): Share this with AndroidDeviceTest.java
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommonTest.java
index 9995fe8..1c7b74e 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommonTest.java
@@ -34,7 +34,7 @@
 
   @Test
   public void enableImplicitSourcelessDepsExportsCompatibilityTest() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--experimental_enable_android_migration_apis", "--experimental_google_legacy_api");
     scratch.file(
         "java/android/compatible.bzl",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkTest.java
index f5c63de..144e822 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkTest.java
@@ -68,7 +68,7 @@
     scratch.file("myinfo/myinfo.bzl", "MyInfo = provider()");
 
     scratch.file("myinfo/BUILD");
-    setSkylarkSemanticsOptions("--experimental_google_legacy_api");
+    setStarlarkSemanticsOptions("--experimental_google_legacy_api");
   }
 
   private StructImpl getMyInfoFromTarget(ConfiguredTarget configuredTarget) throws Exception {
diff --git a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java
index d269081..16d1108 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java
@@ -178,8 +178,8 @@
     ConfiguredTarget top = getConfiguredTarget("//test:top");
     ConfiguredTarget wrapper =
         (ConfiguredTarget) Iterables.getOnlyElement(getPrerequisites(top, "deps"));
-    SkylarkRuleContext ctx = new SkylarkRuleContext(getRuleContextForSkylark(wrapper), null,
-        getSkylarkSemantics());
+    SkylarkRuleContext ctx =
+        new SkylarkRuleContext(getRuleContextForStarlark(wrapper), null, getStarlarkSemantics());
     update("ruleContext", ctx);
     update("config_common", new ConfigSkylarkCommon());
     String value = (String) eval("ruleContext.attr.flag[config_common.FeatureFlagInfo].value");
diff --git a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigSettingTest.java b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigSettingTest.java
index a32c55e..2b4fea8 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigSettingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigSettingTest.java
@@ -1407,7 +1407,7 @@
 
   @Test
   public void buildsettings_matchesFromDefault() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=true");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=true");
 
     scratch.file(
         "test/build_settings.bzl",
@@ -1429,7 +1429,7 @@
 
   @Test
   public void buildsettings_matchesFromCommandLine() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=true");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=true");
     useConfiguration(ImmutableMap.of("//test:cheese", "gouda"));
 
     scratch.file(
@@ -1456,7 +1456,7 @@
    */
   @Test
   public void buildsettings_convertedType() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=true");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=true");
 
     scratch.file(
         "test/build_settings.bzl",
@@ -1478,7 +1478,7 @@
 
   @Test
   public void buildsettings_doesntMatch() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=true");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=true");
     useConfiguration(ImmutableMap.of("//test:cheese", "gouda"));
 
     scratch.file(
@@ -1501,7 +1501,7 @@
 
   @Test
   public void buildsettings_badType() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=true");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=true");
 
     scratch.file(
         "test/build_settings.bzl",
@@ -1526,7 +1526,7 @@
 
   @Test
   public void notBuildSettingOrFeatureFlag() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=true");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=true");
 
     scratch.file(
         "test/rules.bzl",
@@ -1552,7 +1552,7 @@
 
   @Test
   public void buildsettingsMatch_featureFlagsMatch() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=true");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=true");
     useConfiguration("--enforce_transitive_configs_for_config_feature_flag");
 
     scratch.file(
@@ -1582,7 +1582,7 @@
 
   @Test
   public void buildsettingsMatch_featureFlagsDontMatch() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=true");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=true");
     useConfiguration("--enforce_transitive_configs_for_config_feature_flag");
 
     scratch.file(
@@ -1612,7 +1612,7 @@
 
   @Test
   public void buildsettingsDontMatch_featureFlagsMatch() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=true");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=true");
     useConfiguration("--enforce_transitive_configs_for_config_feature_flag");
 
     scratch.file(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java
index d168b74..687d5f5 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcImportBaseConfiguredTargetTest.java
@@ -36,7 +36,7 @@
 
   @Before
   public void setSkylarkImplementationLoadStatement() throws Exception {
-    setSkylarkSemanticsOptions(SkylarkCcCommonTestHelper.CC_SKYLARK_WHITELIST_FLAG);
+    setStarlarkSemanticsOptions(SkylarkCcCommonTestHelper.CC_SKYLARK_WHITELIST_FLAG);
     invalidatePackages();
     setIsSkylarkImplementation();
   }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
similarity index 99%
rename from src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
rename to src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
index a62354a..a82b7ff 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
@@ -80,11 +80,11 @@
 
 /** Unit tests for the {@code cc_common} Starlark module. */
 @RunWith(JUnit4.class)
-public class SkylarkCcCommonTest extends BuildViewTestCase {
+public class StarlarkCcCommonTest extends BuildViewTestCase {
 
   @Before
-  public void setSkylarkSemanticsOptions() throws Exception {
-    setSkylarkSemanticsOptions(SkylarkCcCommonTestHelper.CC_SKYLARK_WHITELIST_FLAG);
+  public void setStarlarkSemanticsOptions() throws Exception {
+    this.setStarlarkSemanticsOptions(SkylarkCcCommonTestHelper.CC_SKYLARK_WHITELIST_FLAG);
     invalidatePackages();
 
     scratch.file("myinfo/myinfo.bzl", "MyInfo = provider()");
@@ -1301,7 +1301,7 @@
                     CppRuleClasses.PIC,
                     CppRuleClasses.SUPPORTS_PIC,
                     CppRuleClasses.SUPPORTS_DYNAMIC_LINKER));
-    setSkylarkSemanticsOptions("--incompatible_depset_for_libraries_to_link_getter");
+    this.setStarlarkSemanticsOptions("--incompatible_depset_for_libraries_to_link_getter");
     setUpCcLinkingContextTest();
     ConfiguredTarget a = getConfiguredTarget("//a:a");
     StructImpl info = ((StructImpl) getMyInfoFromTarget(a).getValue("info"));
@@ -1418,7 +1418,7 @@
       List<String> dynamicLibraryList)
       throws Exception {
     useConfiguration("--features=-supports_interface_shared_libraries");
-    setSkylarkSemanticsOptions("--incompatible_depset_for_libraries_to_link_getter");
+    this.setStarlarkSemanticsOptions("--incompatible_depset_for_libraries_to_link_getter");
     if (experimentalCcSharedLibrary) {
       setUpCcLinkingContextTestForExperimentalCcSharedLibrary();
     } else {
@@ -1605,7 +1605,7 @@
 
   // This test should replace the old linking context test when the old API is deprecated.
   private void setUpCcLinkingContextTestForExperimentalCcSharedLibrary() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_cc_shared_library");
+    this.setStarlarkSemanticsOptions("--experimental_cc_shared_library");
     scratch.file(
         "a/BUILD",
         "load('//tools/build_defs/cc:rule.bzl', 'crule')",
@@ -5873,7 +5873,7 @@
 
   @Test
   public void testIncompatibleRequireLinkerInputCcApi() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_require_linker_input_cc_api");
+    setStarlarkSemanticsOptions("--incompatible_require_linker_input_cc_api");
     setUpCcLinkingContextTest();
     checkError("//a:a", "It may be temporarily re-enabled by setting");
   }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java
index fba3e79..659f7e2 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java
@@ -88,7 +88,7 @@
 
   @Before
   public final void setupSkylarkRule() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_new_actions_api=false");
+    setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
 
     File[] files = Runfiles.location(RULE_DIRECTORY).listFiles();
     for (File file : files) {
diff --git a/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintCollectionApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintCollectionApiTest.java
index faf8790..d80aee9 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintCollectionApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintCollectionApiTest.java
@@ -108,7 +108,7 @@
 
   @Test
   public void testConstraintValue_starlark() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_platforms_api=true");
+    setStarlarkSemanticsOptions("--experimental_platforms_api=true");
     constraintBuilder("//foo:s1").addConstraintValue("value1").write();
     constraintBuilder("//foo:s2").addConstraintValue("value2").write();
     platformBuilder("//foo:my_platform").addConstraint("value1").addConstraint("value2").write();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintTest.java b/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintTest.java
index bc3831c..a3b5d12 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintTest.java
@@ -141,7 +141,7 @@
 
   @Test
   public void testConstraint_defaultValue_starlark() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_platforms_api=true");
+    setStarlarkSemanticsOptions("--experimental_platforms_api=true");
     scratch.file(
         "constraint_default/BUILD",
         "constraint_setting(name = 'basic',",
@@ -198,7 +198,7 @@
 
   @Test
   public void testConstraint_defaultValue_notSet_starlark() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_platforms_api=true");
+    setStarlarkSemanticsOptions("--experimental_platforms_api=true");
     scratch.file("constraint_default/BUILD", "constraint_setting(name = 'basic')");
 
     scratch.file(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/proto/BazelProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/proto/BazelProtoLibraryTest.java
index d3d2608..cef10c9 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/proto/BazelProtoLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/proto/BazelProtoLibraryTest.java
@@ -358,7 +358,7 @@
     invalidatePackages();
 
     if (siblingRepoLayout) {
-      setSkylarkSemanticsOptions("--experimental_sibling_repository_layout");
+      setStarlarkSemanticsOptions("--experimental_sibling_repository_layout");
     }
 
     scratch.file("/foo/WORKSPACE");
@@ -464,7 +464,7 @@
     invalidatePackages();
 
     if (siblingRepoLayout) {
-      setSkylarkSemanticsOptions("--experimental_sibling_repository_layout");
+      setStarlarkSemanticsOptions("--experimental_sibling_repository_layout");
     }
 
     scratch.file("/yolo_repo/WORKSPACE");
@@ -518,7 +518,7 @@
     invalidatePackages();
 
     if (siblingRepoLayout) {
-      setSkylarkSemanticsOptions("--experimental_sibling_repository_layout");
+      setStarlarkSemanticsOptions("--experimental_sibling_repository_layout");
     }
 
     scratch.file("/yolo_repo/WORKSPACE");
@@ -573,7 +573,7 @@
     invalidatePackages();
 
     if (siblingRepoLayout) {
-      setSkylarkSemanticsOptions("--experimental_sibling_repository_layout");
+      setStarlarkSemanticsOptions("--experimental_sibling_repository_layout");
     }
 
     scratch.file("/yolo_repo/WORKSPACE");
@@ -627,7 +627,7 @@
     invalidatePackages();
 
     if (siblingRepoLayout) {
-      setSkylarkSemanticsOptions("--experimental_sibling_repository_layout");
+      setStarlarkSemanticsOptions("--experimental_sibling_repository_layout");
     }
 
     scratch.file("/yolo_repo/WORKSPACE");
diff --git a/src/test/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitionsTest.java b/src/test/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitionsTest.java
index 9b999cc..5e71c0d 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/python/PyStarlarkTransitionsTest.java
@@ -67,7 +67,7 @@
         "my_rule(name = 'default', wrapped = ':wrapped', python_version = 'DEFAULT')",
         "my_rule(name = 'invalid', wrapped = ':wrapped', python_version = 'invalid')",
         "missing_attr_rule(name = 'missing_attr', wrapped = ':wrapped')");
-    setSkylarkSemanticsOptions("--experimental_google_legacy_api");
+    setStarlarkSemanticsOptions("--experimental_google_legacy_api");
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
index 959a013..39a13e5 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
@@ -178,7 +178,7 @@
     // Required since we have a new WORKSPACE file.
     invalidatePackages(true);
 
-    setSkylarkSemanticsOptions("--experimental_sibling_repository_layout");
+    setStarlarkSemanticsOptions("--experimental_sibling_repository_layout");
 
     ConfiguredTarget myTarget = getConfiguredTarget("@r//:t");
     String result = (String) getMyInfoFromTarget(myTarget).getValue("result");
@@ -630,7 +630,7 @@
 
   @Test
   public void testCannotSpecifyRunfilesWithDataOrDefaultRunfiles_struct() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/skylark/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -699,7 +699,7 @@
 
   @Test
   public void testInstrumentedFilesProviderWithCodeCoverageDisabled() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/skylark/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -732,7 +732,7 @@
 
   @Test
   public void testInstrumentedFilesProviderWithCodeCoverageEnabled() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/skylark/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -766,7 +766,7 @@
 
   @Test
   public void testInstrumentedFilesInfo_coverageDisabled() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/skylark/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -2225,7 +2225,7 @@
 
   @Test
   public void testBuildSettingRule_flag() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=true");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=true");
 
     scratch.file("test/rules.bzl",
         "def _impl(ctx): return None",
@@ -2246,7 +2246,7 @@
 
   @Test
   public void testBuildSettingRule_settingByDefault() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=true");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=true");
 
     scratch.file("test/rules.bzl",
         "def _impl(ctx): return None",
@@ -2267,7 +2267,7 @@
 
   @Test
   public void testBuildSettingRule_settingByFlagParameter() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=true");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=true");
 
     scratch.file("test/rules.bzl",
         "def _impl(ctx): return None",
@@ -2289,7 +2289,7 @@
 
   @Test
   public void testBuildSettingRule_noDefault() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=true");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=true");
 
     scratch.file("test/rules.bzl",
         "def _impl(ctx): return None",
@@ -2307,7 +2307,7 @@
 
   @Test
   public void testBuildSettingRule_errorsWithoutExperimentalFlag() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=false");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=false");
 
     scratch.file(
         "test/rules.bzl",
@@ -2589,7 +2589,7 @@
         "load('//test:rules.bzl', 'my_rule', 'simple_rule')",
         "my_rule(name = 'my_rule', dep = ':dep')",
         "simple_rule(name = 'dep')");
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions");
 
     reporter.removeHandler(failFastHandler);
     getConfiguredTarget("//test:my_rule");
@@ -2598,7 +2598,7 @@
 
   @Test
   public void testPrintFromTransitionImpl() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions");
     scratch.file(
         "tools/whitelists/function_transition_whitelist/BUILD",
         "package_group(",
@@ -2650,7 +2650,7 @@
 
   @Test
   public void testTransitionEquality() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions");
     scratch.file(
         "tools/whitelists/function_transition_whitelist/BUILD",
         "package_group(",
@@ -2739,7 +2739,7 @@
         "load('//test:rules.bzl', 'my_rule', 'simple_rule')",
         "my_rule(name = 'my_rule', dep = ':dep')",
         "simple_rule(name = 'dep')");
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions");
 
     reporter.removeHandler(failFastHandler);
     getConfiguredTarget("//test:my_rule");
@@ -2751,7 +2751,7 @@
     // Note that attr.license is deprecated, and thus this test is subject to imminent removal.
     // (See --incompatible_no_attr_license). However, this verifies that until the attribute
     // is removed, values of the attribute are a valid Starlark type.
-    setSkylarkSemanticsOptions("--incompatible_no_attr_license=false");
+    setStarlarkSemanticsOptions("--incompatible_no_attr_license=false");
     scratch.file(
         "test/rule.bzl",
         "def _my_rule_impl(ctx): ",
@@ -2790,7 +2790,7 @@
 
   @Test
   public void testDisallowStructProviderSyntax() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=true");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=true");
     scratch.file(
         "test/skylark/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -2813,7 +2813,7 @@
 
   @Test
   public void testDisableTargetProviderFields() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disable_target_provider_fields=true");
+    setStarlarkSemanticsOptions("--incompatible_disable_target_provider_fields=true");
     scratch.file(
         "test/skylark/rule.bzl",
         "MyProvider = provider()",
@@ -2849,7 +2849,7 @@
   // --incompatible_disable_target_provider_fields.
   @Test
   public void testDisableTargetProviderFields_actionsField() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disable_target_provider_fields=true");
+    setStarlarkSemanticsOptions("--incompatible_disable_target_provider_fields=true");
     scratch.file(
         "test/skylark/rule.bzl",
         "MyProvider = provider()",
@@ -2877,7 +2877,7 @@
 
   @Test
   public void testDisableTargetProviderFields_disabled() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disable_target_provider_fields=false");
+    setStarlarkSemanticsOptions("--incompatible_disable_target_provider_fields=false");
     scratch.file(
         "test/skylark/rule.bzl",
         "MyProvider = provider()",
@@ -2905,7 +2905,7 @@
 
   @Test
   public void testNoRuleOutputsParam() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_no_rule_outputs_param=true");
+    setStarlarkSemanticsOptions("--incompatible_no_rule_outputs_param=true");
     scratch.file(
         "test/skylark/test_rule.bzl",
         "def _impl(ctx):",
@@ -2929,7 +2929,7 @@
 
   @Test
   public void testExecutableNotInRunfiles() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/skylark/test_rule.bzl",
         "def _my_rule_impl(ctx):",
@@ -2951,7 +2951,7 @@
 
   @Test
   public void testCommandStringList() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_run_shell_command_string");
+    setStarlarkSemanticsOptions("--incompatible_run_shell_command_string");
     scratch.file(
         "test/skylark/test_rule.bzl",
         "def _my_rule_impl(ctx):",
@@ -3080,7 +3080,7 @@
 
   @Test
   public void testUnknownStringEscapesForbidden() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_restrict_string_escapes=true");
+    setStarlarkSemanticsOptions("--incompatible_restrict_string_escapes=true");
 
     scratch.file("test/extension.bzl", "y = \"\\z\"");
 
@@ -3093,7 +3093,7 @@
 
   @Test
   public void testUnknownStringEscapes() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_restrict_string_escapes=false");
+    setStarlarkSemanticsOptions("--incompatible_restrict_string_escapes=false");
 
     scratch.file("test/extension.bzl", "y = \"\\z\"");
 
@@ -3288,7 +3288,7 @@
 
   @Test
   public void testLegacyProvider_AddCanonicalLegacyKeyAndModernKey() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/skylark/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -3316,7 +3316,7 @@
 
   @Test
   public void testLegacyProvider_DontAutomaticallyAddKeysAlreadyPresent() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/skylark/extension.bzl",
         "def custom_rule_impl(ctx):",
@@ -3345,7 +3345,7 @@
 
   @Test
   public void testLegacyProvider_FirstNoncanonicalKeyBecomesCanonical() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/skylark/extension.bzl",
         "def custom_rule_impl(ctx):",
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
index d55101c..6f718ad 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
@@ -253,7 +253,7 @@
 
   @Test
   public void testDisableDeprecatedParams() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disable_deprecated_attr_params=true");
+    setStarlarkSemanticsOptions("--incompatible_disable_deprecated_attr_params=true");
 
     // Verify 'single_file' deprecation.
     EvalException expected =
@@ -597,7 +597,7 @@
 
   @Test
   public void testAttrNonEmpty() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disable_deprecated_attr_params=false");
+    setStarlarkSemanticsOptions("--incompatible_disable_deprecated_attr_params=false");
     reset();
 
     Attribute attr = buildAttribute("a1", "attr.string_list(non_empty=True)");
@@ -1784,7 +1784,7 @@
 
   @Test
   public void testRuleAddExecGroup() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_exec_groups=true");
+    setStarlarkSemanticsOptions("--experimental_exec_groups=true");
     reset();
 
     registerDummyStarlarkFunction();
@@ -1844,7 +1844,7 @@
 
   @Test
   public void testCreateExecGroup() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_exec_groups=true");
+    setStarlarkSemanticsOptions("--experimental_exec_groups=true");
     reset();
 
     scratch.file("test/BUILD", "toolchain_type(name = 'my_toolchain_type')");
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java
index e4309a2..3e80e40 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java
@@ -223,7 +223,7 @@
 
   @Test
   public void testMandatoryProvidersListWithSkylark() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file("test/BUILD",
             "load('//test:rules.bzl', 'skylark_rule', 'my_rule', 'my_other_rule')",
             "my_rule(name = 'mylib',",
@@ -264,7 +264,7 @@
 
   @Test
   public void testMandatoryProvidersListWithNative() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file("test/BUILD",
             "load('//test:rules.bzl', 'my_rule', 'my_other_rule')",
             "my_rule(name = 'mylib',",
@@ -899,7 +899,7 @@
 
   @Test
   public void testDeriveArtifactLegacy() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_new_actions_api=false");
+    setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
     setRuleContext(createRuleContext("//foo:foo"));
     Object result = eval("ruleContext.new_file(ruleContext.genfiles_dir," + "  'a/b.txt')");
     PathFragment fragment = ((Artifact) result).getRootRelativePath();
@@ -947,7 +947,7 @@
 
   @Test
   public void testParamFileLegacy() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_new_actions_api=false");
+    setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
     setRuleContext(createRuleContext("//foo:foo"));
     Object result =
         eval(
@@ -958,7 +958,7 @@
 
   @Test
   public void testParamFileSuffixLegacy() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_new_actions_api=false");
+    setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
     setRuleContext(createRuleContext("//foo:foo"));
     Object result =
         eval(
@@ -1173,7 +1173,7 @@
 
   @Test
   public void testLabelKeyedStringDictAllowsRulesWithRequiredProviders_legacy() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "my_rule.bzl",
         "def _impl(ctx):",
@@ -1594,7 +1594,7 @@
 
   @Test
   public void testAccessingRunfilesSymlinks_legacy() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file("test/a.py");
     scratch.file("test/b.py");
     scratch.file(
@@ -1687,7 +1687,7 @@
 
   @Test
   public void testAccessingRunfilesRootSymlinks_legacy() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file("test/a.py");
     scratch.file("test/b.py");
     scratch.file(
@@ -1905,7 +1905,7 @@
 
   @Test
   public void testAbstractActionInterface() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--incompatible_disallow_struct_provider_syntax=false",
         "--incompatible_no_rule_outputs_param=false");
     scratch.file("test/rules.bzl",
@@ -1950,7 +1950,7 @@
 
   @Test
   public void testCreatedActions() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--incompatible_disallow_struct_provider_syntax=false",
         "--incompatible_no_rule_outputs_param=false");
     // createRuleContext() gives us the context for a rule upon entry into its analysis function.
@@ -2036,7 +2036,7 @@
 
   @Test
   public void testRunShellUsesHelperScriptForLongCommand() throws Exception {
-    setSkylarkSemanticsOptions(
+    setStarlarkSemanticsOptions(
         "--incompatible_disallow_struct_provider_syntax=false",
         "--incompatible_no_rule_outputs_param=false");
     // createRuleContext() gives us the context for a rule upon entry into its analysis function.
@@ -2386,7 +2386,7 @@
 
   @Test
   public void testFrozenRuleContextHasInaccessibleAttributes() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_new_actions_api=false");
+    setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
     scratch.file("test/BUILD",
         "load('//test:rules.bzl', 'main_rule', 'dep_rule')",
         "dep_rule(name = 'dep')",
@@ -2429,7 +2429,7 @@
 
   @Test
   public void testFrozenRuleContextForAspectsHasInaccessibleAttributes() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_new_actions_api=false");
+    setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
     List<String> attributes = new ArrayList<>();
     attributes.addAll(ctxAttributes);
     attributes.addAll(ImmutableList.of(
@@ -2508,7 +2508,7 @@
           "  outputs = {'file': 'output.txt'},",
           ")"
       );
-      setSkylarkSemanticsOptions("--incompatible_new_actions_api=true");
+      setStarlarkSemanticsOptions("--incompatible_new_actions_api=true");
       invalidatePackages();
       AssertionError e =
           assertThrows(
@@ -2544,7 +2544,7 @@
   }
 
   private void writeIntFlagBuildSettingFiles() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=True");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=True");
     scratch.file(
         "test/build_setting.bzl",
         "BuildSettingInfo = provider(fields = ['name', 'value'])",
@@ -2592,7 +2592,7 @@
 
   @Test
   public void testBuildSettingValue_nonBuildSettingRule() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=True");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=True");
     scratch.file(
         "test/rule.bzl",
         "def _impl(ctx):",
@@ -2792,7 +2792,7 @@
         "something/BUILD",
         "load('//something:defs.bzl', 'use_exec_groups')",
         "use_exec_groups(name = 'nectarine')");
-    setSkylarkSemanticsOptions("--experimental_exec_groups=true");
+    setStarlarkSemanticsOptions("--experimental_exec_groups=true");
     useConfiguration(
         "--extra_toolchains=//toolchain:foo_toolchain,//toolchain:bar_toolchain",
         "--platforms=//platform:platform_1");
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
index 7ceeb9b..7cac83f 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
@@ -448,7 +448,7 @@
 
   @Test
   public void testCreateSpawnActionWithToolInInputsLegacy() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_no_support_tools_in_action_inputs=false");
+    setStarlarkSemanticsOptions("--incompatible_no_support_tools_in_action_inputs=false");
     setupToolInInputsTest(
         "output = ctx.actions.declare_file('bar.out')",
         "ctx.actions.run_shell(",
@@ -463,7 +463,7 @@
 
   @Test
   public void testCreateSpawnActionWithToolAttribute() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_no_support_tools_in_action_inputs=true");
+    setStarlarkSemanticsOptions("--incompatible_no_support_tools_in_action_inputs=true");
     setupToolInInputsTest(
         "output = ctx.actions.declare_file('bar.out')",
         "ctx.actions.run_shell(",
@@ -479,7 +479,7 @@
 
   @Test
   public void testCreateSpawnActionWithToolAttributeIgnoresToolsInInputs() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_no_support_tools_in_action_inputs=true");
+    setStarlarkSemanticsOptions("--incompatible_no_support_tools_in_action_inputs=true");
     setupToolInInputsTest(
         "output = ctx.actions.declare_file('bar.out')",
         "ctx.actions.run_shell(",
@@ -495,7 +495,7 @@
 
   @Test
   public void testCreateSpawnActionWithToolInInputsFailAtAnalysisTime() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_no_support_tools_in_action_inputs=true");
+    setStarlarkSemanticsOptions("--incompatible_no_support_tools_in_action_inputs=true");
     setupToolInInputsTest(
         "output = ctx.actions.declare_file('bar.out')",
         "ctx.actions.run_shell(",
@@ -1150,7 +1150,7 @@
 
   @Test
   public void testDefaultProviderInvalidConfiguration() throws Exception {
-    setSkylarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
+    setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
     scratch.file(
         "test/foo.bzl",
         "foo_provider = provider()",
@@ -2547,7 +2547,7 @@
 
     scratch.file("test/BUILD", "load('//test:rule.bzl', 'foo')", "foo(name='foo')");
 
-    setSkylarkSemanticsOptions("--experimental_starlark_config_transitions=true");
+    setStarlarkSemanticsOptions("--experimental_starlark_config_transitions=true");
 
     reporter.removeHandler(failFastHandler);
     getConfiguredTarget("//test:foo");
@@ -2588,7 +2588,7 @@
         "    '_attr': attr.label(",
         "        cfg = android_common.multi_cpu_configuration,",
         "        default = configuration_field(fragment='cpp', name = 'cc_toolchain'))})");
-    setSkylarkSemanticsOptions("--experimental_google_legacy_api");
+    setStarlarkSemanticsOptions("--experimental_google_legacy_api");
 
     scratch.file("test/BUILD", "load('//test:rule.bzl', 'foo')", "foo(name='foo')");
 
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/StarlarkOptionsParsingTest.java b/src/test/java/com/google/devtools/build/lib/skylark/StarlarkOptionsParsingTest.java
index 3e7bc96..4785d7f 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/StarlarkOptionsParsingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/StarlarkOptionsParsingTest.java
@@ -120,7 +120,7 @@
   // test --non_flag_setting=value
   @Test
   public void testNonFlagParsing() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=True");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=True");
 
     scratch.file(
         "test/build_setting.bzl",
@@ -209,7 +209,7 @@
   // test --flagA=valueA --flagB=valueB
   @Test
   public void testMultipleFlags() throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=True");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=True");
 
     scratch.file(
         "test/build_setting.bzl",
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/util/SkylarkTestCase.java b/src/test/java/com/google/devtools/build/lib/skylark/util/SkylarkTestCase.java
index 1619f0d..c46c706 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/util/SkylarkTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/util/SkylarkTestCase.java
@@ -60,7 +60,7 @@
             Mutability mu = Mutability.create("test");
             StarlarkThread thread =
                 StarlarkThread.builder(mu)
-                    .setSemantics(getSkylarkSemantics())
+                    .setSemantics(getStarlarkSemantics())
                     .setGlobals(
                         globals.withLabel(
                             Label.parseAbsoluteUnchecked("//test:label", /*defaultToMain=*/ false)))
@@ -107,8 +107,8 @@
   }
 
   protected final SkylarkRuleContext createRuleContext(String label) throws Exception {
-    return new SkylarkRuleContext(getRuleContextForSkylark(getConfiguredTarget(label)), null,
-        getSkylarkSemantics());
+    return new SkylarkRuleContext(
+        getRuleContextForStarlark(getConfiguredTarget(label)), null, getStarlarkSemantics());
   }
 
   // Disable BuildViewTestCase's overload to avoid unintended calls.
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/util/StarlarkOptionsTestCase.java b/src/test/java/com/google/devtools/build/lib/skylark/util/StarlarkOptionsTestCase.java
index c7956ac..5d29c6a 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/util/StarlarkOptionsTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/util/StarlarkOptionsTestCase.java
@@ -68,7 +68,7 @@
 
   private void writeBuildSetting(String type, String defaultValue, boolean isFlag)
       throws Exception {
-    setSkylarkSemanticsOptions("--experimental_build_setting_api=True");
+    setStarlarkSemanticsOptions("--experimental_build_setting_api=True");
 
     String flag = isFlag ? "True" : "False";
 
