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 cc12e5c..376bed4 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
@@ -44,15 +44,15 @@
  *   <li>Add a new {@code @Option}-annotated field to this class. The field name and default value
  *       should be the same as in {@link StarlarkSemantics}, and the option name in the annotation
  *       should be that name written in snake_case. Add a line to set the new field in {@link
- *       #toSkylarkSemantics}.
+ *       #toStarlarkSemantics}.
  *   <li>Add a line to set the new field in both {@link
- *       SkylarkSemanticsConsistencyTest#buildRandomOptions} and {@link
- *       SkylarkSemanticsConsistencyTest#buildRandomSemantics}.
+ *       StarlarkSemanticsConsistencyTest#buildRandomOptions} and {@link
+ *       StarlarkSemanticsConsistencyTest#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 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}.
+ *       StarlarkCallable.enableOnlyWithFlag} or {@code StarlarkCallable.disableWithFlag}.
  * </ul>
  *
  * For both readability and correctness, the relative order of the options in all of these locations
@@ -118,7 +118,7 @@
       help =
           "Passes list of packages that can use the C++ Starlark API. Don't enable this flag yet, "
               + "we will be making breaking changes.")
-  public List<String> experimentalCcSkylarkApiEnabledPackages;
+  public List<String> experimentalCcStarlarkApiEnabledPackages;
 
   @Option(
       name = "experimental_enable_android_migration_apis",
@@ -528,7 +528,7 @@
       defaultValue = "false",
       documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
       effectTags = {OptionEffectTag.UNKNOWN})
-  public boolean internalSkylarkFlagTestCanary;
+  public boolean internalStarlarkFlagTestCanary;
 
   @Option(
       name = "incompatible_do_not_split_linking_cmdline",
@@ -629,7 +629,7 @@
   private static final Interner<StarlarkSemantics> INTERNER = BlazeInterners.newWeakInterner();
 
   /** Constructs a {@link StarlarkSemantics} object corresponding to this set of option values. */
-  public StarlarkSemantics toSkylarkSemantics() {
+  public StarlarkSemantics toStarlarkSemantics() {
     StarlarkSemantics semantics =
         StarlarkSemantics.builder()
             // <== Add new options here in alphabetic order ==>
@@ -639,7 +639,7 @@
                 experimentalAllowIncrementalRepositoryUpdates)
             .experimentalAllowTagsPropagation(experimentalAllowTagsPropagation)
             .experimentalBuildSettingApi(experimentalBuildSettingApi)
-            .experimentalCcSkylarkApiEnabledPackages(experimentalCcSkylarkApiEnabledPackages)
+            .experimentalCcStarlarkApiEnabledPackages(experimentalCcStarlarkApiEnabledPackages)
             .experimentalEnableAndroidMigrationApis(experimentalEnableAndroidMigrationApis)
             .experimentalGoogleLegacyApi(experimentalGoogleLegacyApi)
             .experimentalNinjaActions(experimentalNinjaActions)
@@ -669,7 +669,7 @@
             .incompatibleStringReplaceCount(incompatibleStringReplaceCount)
             .incompatibleVisibilityPrivateAttributesAtDefinition(
                 incompatibleVisibilityPrivateAttributesAtDefinition)
-            .internalSkylarkFlagTestCanary(internalSkylarkFlagTestCanary)
+            .internalStarlarkFlagTestCanary(internalStarlarkFlagTestCanary)
             .incompatibleDoNotSplitLinkingCmdline(incompatibleDoNotSplitLinkingCmdline)
             .incompatibleUseCcConfigureFromRulesCc(incompatibleUseCcConfigureFromRulesCc)
             .incompatibleDepsetForLibrariesToLinkGetter(incompatibleDepsetForLibrariesToLinkGetter)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index 003708f..d6dfbff 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -217,7 +217,7 @@
 
   public static void checkLocationWhitelisted(
       StarlarkSemantics semantics, Location location, String callPath) throws EvalException {
-    List<String> whitelistedPackagesList = semantics.experimentalCcSkylarkApiEnabledPackages();
+    List<String> whitelistedPackagesList = semantics.experimentalCcStarlarkApiEnabledPackages();
     if (whitelistedPackagesList.stream().noneMatch(path -> callPath.startsWith(path))) {
       throwWhiteListError(location, callPath, whitelistedPackagesList);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index d0efb61..1dbe662 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -1434,7 +1434,7 @@
 
   public StarlarkSemantics getEffectiveStarlarkSemantics(
       StarlarkSemanticsOptions starlarkSemanticsOptions) {
-    return starlarkSemanticsOptions.toSkylarkSemantics();
+    return starlarkSemanticsOptions.toStarlarkSemantics();
   }
 
   private void setPackageLocator(PathPackageLocator pkgLocator) {
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
index eb43708..7628165 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
@@ -767,7 +767,7 @@
     // As part of the integration test "skylark_flag_test.sh", if the
     // "--internal_skylark_flag_test_canary" flag is enabled, append an extra marker string to
     // the output.
-    if (thread.getSemantics().internalSkylarkFlagTestCanary()) {
+    if (thread.getSemantics().internalStarlarkFlagTestCanary()) {
       p.append("<== Starlark flag test ==>");
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
index 8152dc7..ce2e200 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
@@ -42,7 +42,7 @@
 // - incompatibleRestrictStringEscapes, which affects the lexer and is thus
 //   properly one of the FileOptions, but piggybacks on the command-line flag
 //   plumbing of StarlarkSemantics; and
-// - internalSkylarkFlagTestCanary, which is used to test propagation of Bazel
+// - internalStarlarkFlagTestCanary, which is used to test propagation of Bazel
 //   command-line flags to the 'print' built-in, but this could easily be
 //   achieved using some other Bazel-specific built-in.
 // Most of the rest are used generically to disable parameters to built-ins,
@@ -50,7 +50,7 @@
 // a generic set-of-feature-strings representation would do.
 // A few could be expressed as Bazel-specific thread state,
 // though several are inspected by the implementations of operations
-// such as SkylarkIndexable, SkylarkQueryable, and SkylarkClassObject.
+// such as StarlarkIndexable, StarlarkQueryable, and StarlarkClassObject.
 // TODO(adonovan): move to lib.packages.BuildLanguageSemantics.
 //
 @AutoValue
@@ -205,7 +205,7 @@
 
   public abstract boolean experimentalBuildSettingApi();
 
-  public abstract ImmutableList<String> experimentalCcSkylarkApiEnabledPackages();
+  public abstract ImmutableList<String> experimentalCcStarlarkApiEnabledPackages();
 
   public abstract boolean experimentalEnableAndroidMigrationApis();
 
@@ -261,7 +261,7 @@
 
   public abstract boolean incompatibleVisibilityPrivateAttributesAtDefinition();
 
-  public abstract boolean internalSkylarkFlagTestCanary();
+  public abstract boolean internalStarlarkFlagTestCanary();
 
   public abstract boolean incompatibleDoNotSplitLinkingCmdline();
 
@@ -318,7 +318,7 @@
           .experimentalActionArgs(false)
           .experimentalAllowTagsPropagation(false)
           .experimentalBuildSettingApi(true)
-          .experimentalCcSkylarkApiEnabledPackages(ImmutableList.of())
+          .experimentalCcStarlarkApiEnabledPackages(ImmutableList.of())
           .experimentalAllowIncrementalRepositoryUpdates(true)
           .experimentalEnableAndroidMigrationApis(false)
           .experimentalGoogleLegacyApi(false)
@@ -347,7 +347,7 @@
           .incompatibleRunShellCommandString(false)
           .incompatibleStringReplaceCount(false)
           .incompatibleVisibilityPrivateAttributesAtDefinition(false)
-          .internalSkylarkFlagTestCanary(false)
+          .internalStarlarkFlagTestCanary(false)
           .incompatibleDoNotSplitLinkingCmdline(true)
           .incompatibleDepsetForLibrariesToLinkGetter(true)
           .incompatibleRequireLinkerInputCcApi(false)
@@ -373,7 +373,7 @@
 
     public abstract Builder experimentalBuildSettingApi(boolean value);
 
-    public abstract Builder experimentalCcSkylarkApiEnabledPackages(List<String> value);
+    public abstract Builder experimentalCcStarlarkApiEnabledPackages(List<String> value);
 
     public abstract Builder experimentalEnableAndroidMigrationApis(boolean value);
 
@@ -429,7 +429,7 @@
 
     public abstract Builder incompatibleVisibilityPrivateAttributesAtDefinition(boolean value);
 
-    public abstract Builder internalSkylarkFlagTestCanary(boolean value);
+    public abstract Builder internalStarlarkFlagTestCanary(boolean value);
 
     public abstract Builder incompatibleDoNotSplitLinkingCmdline(boolean value);
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
index 06672c4..490d500 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -223,7 +223,7 @@
     try {
       new SkydocMain(new FilesystemFileAccessor(), skydocOptions.workspaceName, depRoots)
           .eval(
-              semanticsOptions.toSkylarkSemantics(),
+              semanticsOptions.toStarlarkSemantics(),
               targetFileLabel,
               ruleInfoMap,
               providerInfoMap,
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 f24c2bc..dc93112 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
@@ -353,7 +353,7 @@
   }
 
   protected StarlarkSemantics getStarlarkSemantics() {
-    return starlarkSemanticsOptions.toSkylarkSemantics();
+    return starlarkSemanticsOptions.toStarlarkSemantics();
   }
 
   protected PackageValidator getPackageValidator() {
@@ -2034,7 +2034,7 @@
 
     @Override
     public StarlarkSemantics getSkylarkSemantics() {
-      return starlarkSemanticsOptions.toSkylarkSemantics();
+      return starlarkSemanticsOptions.toStarlarkSemantics();
     }
 
     @Override
diff --git a/src/test/java/com/google/devtools/build/lib/blackbox/tests/workspace/BUILD b/src/test/java/com/google/devtools/build/lib/blackbox/tests/workspace/BUILD
index bdaa80a..57ab156 100644
--- a/src/test/java/com/google/devtools/build/lib/blackbox/tests/workspace/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/blackbox/tests/workspace/BUILD
@@ -37,10 +37,10 @@
 )
 
 java_test(
-    name = "BazelEmbeddedSkylarkBlackBoxTest",
+    name = "BazelEmbeddedStarlarkBlackBoxTest",
     timeout = "moderate",
     srcs = [
-        "BazelEmbeddedSkylarkBlackBoxTest.java",
+        "BazelEmbeddedStarlarkBlackBoxTest.java",
         "RepoWithRuleWritingTextGenerator.java",
         "WorkspaceTestUtils.java",
     ],
@@ -91,7 +91,7 @@
     name = "ws_black_box_tests",
     tags = ["black_box_test"],
     tests = [
-        "BazelEmbeddedSkylarkBlackBoxTest",
+        "BazelEmbeddedStarlarkBlackBoxTest",
         "GitRepositoryBlackBoxTest",
         "PatchApiBlackBoxTest",
         "RepoWithRuleWritingTextGeneratorTest",
diff --git a/src/test/java/com/google/devtools/build/lib/blackbox/tests/workspace/BazelEmbeddedSkylarkBlackBoxTest.java b/src/test/java/com/google/devtools/build/lib/blackbox/tests/workspace/BazelEmbeddedStarlarkBlackBoxTest.java
similarity index 97%
rename from src/test/java/com/google/devtools/build/lib/blackbox/tests/workspace/BazelEmbeddedSkylarkBlackBoxTest.java
rename to src/test/java/com/google/devtools/build/lib/blackbox/tests/workspace/BazelEmbeddedStarlarkBlackBoxTest.java
index 6dd37a2..92c8b18 100644
--- a/src/test/java/com/google/devtools/build/lib/blackbox/tests/workspace/BazelEmbeddedSkylarkBlackBoxTest.java
+++ b/src/test/java/com/google/devtools/build/lib/blackbox/tests/workspace/BazelEmbeddedStarlarkBlackBoxTest.java
@@ -36,9 +36,9 @@
 
 /**
  * Test that the embedded Starlark code is compliant with --all_incompatible_changes. To replace
- * bazel_embedded_skylark_test.sh.
+ * bazel_embedded_starlark_test.sh.
  */
-public class BazelEmbeddedSkylarkBlackBoxTest extends AbstractBlackBoxTest {
+public class BazelEmbeddedStarlarkBlackBoxTest extends AbstractBlackBoxTest {
 
   private static final String HELLO_FROM_EXTERNAL_REPOSITORY = "Hello from external repository!";
   private static final String HELLO_FROM_MAIN_REPOSITORY = "Hello from main repository!";
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/StarlarkSemanticsConsistencyTest.java
similarity index 93%
rename from src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
rename to src/test/java/com/google/devtools/build/lib/packages/StarlarkSemanticsConsistencyTest.java
index 74effcb..422eda4 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/StarlarkSemanticsConsistencyTest.java
@@ -44,11 +44,11 @@
  *       StarlarkSemanticsOptions}, or vice versa, then the programmer will either be unable to
  *       implement its behavior, or unable to test it from the command line and add user
  *       documentation. We hope that the programmer notices this on their own.
- *   <li>If {@link StarlarkSemanticsOptions#toSkylarkSemantics} is not updated to set all fields of
+ *   <li>If {@link StarlarkSemanticsOptions#toStarlarkSemantics} is not updated to set all fields of
  *       {@code StarlarkSemantics}, then it will fail immediately because all fields of {@link
  *       StarlarkSemantics.Builder} are mandatory.
  *   <li>To catch a copy/paste error where the wrong field's data is threaded through {@code
- *       toSkylarkSemantics()} or {@code deserialize(...)}, we repeatedly generate matching random
+ *       toStarlarkSemantics()} or {@code deserialize(...)}, we repeatedly generate matching random
  *       instances of the input and expected output objects.
  *   <li>The {@link #checkDefaultsMatch} test ensures that there is no divergence between the
  *       default values of the two classes.
@@ -57,7 +57,7 @@
  * </ul>
  */
 @RunWith(JUnit4.class)
-public class SkylarkSemanticsConsistencyTest {
+public class StarlarkSemanticsConsistencyTest {
 
   private static final int NUM_RANDOM_TRIALS = 10;
 
@@ -71,7 +71,7 @@
       long seed = i;
       StarlarkSemanticsOptions options = buildRandomOptions(new Random(seed));
       StarlarkSemantics semantics = buildRandomSemantics(new Random(seed));
-      StarlarkSemantics semanticsFromOptions = options.toSkylarkSemantics();
+      StarlarkSemantics semanticsFromOptions = options.toStarlarkSemantics();
       assertThat(semanticsFromOptions).isEqualTo(semantics);
     }
   }
@@ -99,16 +99,16 @@
   public void checkDefaultsMatch() {
     StarlarkSemanticsOptions defaultOptions = Options.getDefaults(StarlarkSemanticsOptions.class);
     StarlarkSemantics defaultSemantics = StarlarkSemantics.DEFAULT;
-    StarlarkSemantics semanticsFromOptions = defaultOptions.toSkylarkSemantics();
+    StarlarkSemantics semanticsFromOptions = defaultOptions.toStarlarkSemantics();
     assertThat(semanticsFromOptions).isEqualTo(defaultSemantics);
   }
 
   @Test
   public void canGetBuilderFromInstance() {
     StarlarkSemantics original = StarlarkSemantics.DEFAULT;
-    assertThat(original.internalSkylarkFlagTestCanary()).isFalse();
-    StarlarkSemantics modified = original.toBuilder().internalSkylarkFlagTestCanary(true).build();
-    assertThat(modified.internalSkylarkFlagTestCanary()).isTrue();
+    assertThat(original.internalStarlarkFlagTestCanary()).isFalse();
+    StarlarkSemantics modified = original.toBuilder().internalStarlarkFlagTestCanary(true).build();
+    assertThat(modified.internalStarlarkFlagTestCanary()).isTrue();
   }
 
   /**
@@ -179,7 +179,7 @@
         .experimentalSiblingRepositoryLayout(rand.nextBoolean())
         .experimentalAllowIncrementalRepositoryUpdates(rand.nextBoolean())
         .experimentalBuildSettingApi(rand.nextBoolean())
-        .experimentalCcSkylarkApiEnabledPackages(
+        .experimentalCcStarlarkApiEnabledPackages(
             ImmutableList.of(String.valueOf(rand.nextDouble()), String.valueOf(rand.nextDouble())))
         .experimentalEnableAndroidMigrationApis(rand.nextBoolean())
         .experimentalGoogleLegacyApi(rand.nextBoolean())
@@ -213,7 +213,7 @@
         .incompatibleRequireLinkerInputCcApi(rand.nextBoolean())
         .incompatibleRestrictStringEscapes(rand.nextBoolean())
         .incompatibleUseCcConfigureFromRulesCc(rand.nextBoolean())
-        .internalSkylarkFlagTestCanary(rand.nextBoolean())
+        .internalStarlarkFlagTestCanary(rand.nextBoolean())
         .maxComputationSteps(rand.nextLong())
         .recordRuleInstantiationCallstack(rand.nextBoolean())
         .build();
diff --git a/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java b/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
index 2839948..e59c1f9 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
@@ -123,7 +123,7 @@
     OptionsParser parser =
         OptionsParser.builder().optionsClasses(StarlarkSemanticsOptions.class).build();
     parser.parse(options);
-    return parser.getOptions(StarlarkSemanticsOptions.class).toSkylarkSemantics();
+    return parser.getOptions(StarlarkSemanticsOptions.class).toStarlarkSemantics();
   }
 
 }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
index 9226164..0a387f7 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
@@ -113,7 +113,7 @@
             ? ImmutableList.<String>of()
             : ImmutableList.<String>of(skylarkOption));
     StarlarkSemantics semantics =
-        parser.getOptions(StarlarkSemanticsOptions.class).toSkylarkSemantics();
+        parser.getOptions(StarlarkSemanticsOptions.class).toStarlarkSemantics();
 
     try {
       Package externalPkg =
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/AndroidStarlarkTest.java
similarity index 99%
rename from src/test/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkTest.java
rename to src/test/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkTest.java
index 144e822..084d22f 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/AndroidStarlarkTest.java
@@ -35,7 +35,7 @@
 import org.junit.runners.JUnit4;
 
 @RunWith(JUnit4.class)
-public class AndroidSkylarkTest extends BuildViewTestCase {
+public class AndroidStarlarkTest extends BuildViewTestCase {
 
   private void writeAndroidSplitTransitionTestFiles() throws Exception {
     scratch.file(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/BUILD b/src/test/java/com/google/devtools/build/lib/rules/android/BUILD
index 248b694..5cb3f3f3 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/BUILD
@@ -32,8 +32,8 @@
 )
 
 java_test(
-    name = "AndroidSkylarkTest",
-    srcs = ["AndroidSkylarkTest.java"],
+    name = "AndroidStarlarkTest",
+    srcs = ["AndroidStarlarkTest.java"],
     deps = [
         "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
index 5eea2dc..1f37f10 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
@@ -24,7 +24,7 @@
             "CcBinaryThinLtoTest.java",
             "CcCompilationHelperTest.java",
             "CcImportBaseConfiguredTargetTest.java",
-            "CppConfigurationSkylarkTest.java",
+            "CppConfigurationStarlarkTest.java",
             "CppSysrootTest.java",
             "LinkCommandLineTest.java",
             "StarlarkCcCommonTestHelper.java",
@@ -140,8 +140,8 @@
 )
 
 java_test(
-    name = "CppConfigurationSkylarkTest",
-    srcs = ["CppConfigurationSkylarkTest.java"],
+    name = "CppConfigurationStarlarkTest",
+    srcs = ["CppConfigurationStarlarkTest.java"],
     deps = [
         "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/test/java/com/google/devtools/build/lib/analysis/util",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationSkylarkTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationStarlarkTest.java
similarity index 97%
rename from src/test/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationSkylarkTest.java
rename to src/test/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationStarlarkTest.java
index 47ab85a..ce1c63f 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationSkylarkTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppConfigurationStarlarkTest.java
@@ -25,7 +25,7 @@
 
 /** Tests for C++ fragments in Starlark. */
 @RunWith(JUnit4.class)
-public final class CppConfigurationSkylarkTest extends BuildViewTestCase {
+public final class CppConfigurationStarlarkTest extends BuildViewTestCase {
 
   @Test
   public void testMinimumOsVersion() throws Exception {
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcToolchainConfigureTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcToolchainConfigureTest.java
similarity index 94%
rename from src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcToolchainConfigureTest.java
rename to src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcToolchainConfigureTest.java
index e8f5a54..167106a 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcToolchainConfigureTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcToolchainConfigureTest.java
@@ -25,7 +25,7 @@
 
 /** Tests for cc autoconfiguration. */
 @RunWith(JUnit4.class)
-public class SkylarkCcToolchainConfigureTest extends EvaluationTestCase {
+public class StarlarkCcToolchainConfigureTest extends EvaluationTestCase {
 
   @Test
   public void testSplitEscaped() throws Exception {
@@ -50,8 +50,8 @@
         .testExpression("split_escaped('a%:', ':')", StarlarkList.of(mu, "a:"));
   }
 
-  private Scenario newTest(String... skylarkOptions) throws IOException {
-    return new Scenario(skylarkOptions)
+  private Scenario newTest(String... starlarkOptions) throws IOException {
+    return new Scenario(starlarkOptions)
         // A mock implementation of Label to be able to parse lib_cc_configure under default
         // Starlark environment (lib_cc_configure is meant to be used from the repository
         // environment).
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/BUILD b/src/test/java/com/google/devtools/build/lib/rules/java/BUILD
index 6d7b923..cfa252b 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/BUILD
@@ -13,8 +13,8 @@
 )
 
 java_test(
-    name = "JavaInfoSkylarkApiTest",
-    srcs = ["JavaInfoSkylarkApiTest.java"],
+    name = "JavaInfoStarlarkApiTest",
+    srcs = ["JavaInfoStarlarkApiTest.java"],
     deps = [
         "//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
@@ -55,8 +55,8 @@
 )
 
 java_test(
-    name = "JavaSkylarkApiTest",
-    srcs = ["JavaSkylarkApiTest.java"],
+    name = "JavaStarlarkApiTest",
+    srcs = ["JavaStarlarkApiTest.java"],
     deps = [
         "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/actions",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoSkylarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoStarlarkApiTest.java
similarity index 99%
rename from src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoSkylarkApiTest.java
rename to src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoStarlarkApiTest.java
index 08ca059..6605455 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoSkylarkApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoStarlarkApiTest.java
@@ -32,7 +32,7 @@
 
 /** Tests JavaInfo API for Starlark. */
 @RunWith(JUnit4.class)
-public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
+public class JavaInfoStarlarkApiTest extends BuildViewTestCase {
 
   private static final String HOST_JAVA_RUNTIME_LABEL =
       TestConstants.TOOLS_REPOSITORY + "//tools/jdk:current_host_java_runtime";
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaStarlarkApiTest.java
similarity index 99%
rename from src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
rename to src/test/java/com/google/devtools/build/lib/rules/java/JavaStarlarkApiTest.java
index 2cddf14..24b0ded 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaStarlarkApiTest.java
@@ -46,7 +46,7 @@
 
 /** Tests Starlark API for Java rules. */
 @RunWith(JUnit4.class)
-public class JavaSkylarkApiTest extends BuildViewTestCase {
+public class JavaStarlarkApiTest extends BuildViewTestCase {
   private static final String HOST_JAVA_RUNTIME_LABEL =
       TestConstants.TOOLS_REPOSITORY + "//tools/jdk:current_host_java_runtime";
 
@@ -465,7 +465,7 @@
         "  fragments = ['java']",
         ")");
 
-    testAnnotationProcessingInfoIsSkylarkAccessible(
+    testAnnotationProcessingInfoIsStarlarkAccessible(
         /*toBeProcessedRuleName=*/ "java_custom_library",
         /*extraLoad=*/ "load(':custom_rule.bzl', 'java_custom_library')");
   }
@@ -993,7 +993,7 @@
    */
   @Test
   public void testJavaPlugin() throws Exception {
-    testAnnotationProcessingInfoIsSkylarkAccessible(
+    testAnnotationProcessingInfoIsStarlarkAccessible(
         /*toBeProcessedRuleName=*/ "java_library", /*extraLoad=*/ "");
   }
 
@@ -1002,7 +1002,7 @@
    * to use annotation processing itself and has a dep and an export that likewise use annotation
    * processing.
    */
-  private void testAnnotationProcessingInfoIsSkylarkAccessible(
+  private void testAnnotationProcessingInfoIsStarlarkAccessible(
       String toBeProcessedRuleName, String extraLoad) throws Exception {
     scratch.file(
         "java/test/extension.bzl",
@@ -1080,7 +1080,7 @@
   }
 
   @Test
-  public void testJavaProviderFieldsAreSkylarkAccessible() throws Exception {
+  public void testJavaProviderFieldsAreStarlarkAccessible() throws Exception {
     // The Starlark evaluation itself will test that compile_jars and
     // transitive_runtime_jars are returning a list readable by Starlark with
     // the expected number of entries.
@@ -1144,7 +1144,7 @@
   }
 
   @Test
-  public void testSkylarkApiProviderReexported() throws Exception {
+  public void testStarlarkApiProviderReexported() throws Exception {
     scratch.file(
         "java/test/extension.bzl",
         "def impl(ctx):",
@@ -1226,7 +1226,7 @@
   }
 
   @Test
-  public void skylarkJavaToJavaLibraryAttributes() throws Exception {
+  public void starlarkJavaToJavaLibraryAttributes() throws Exception {
     scratch.file(
         "foo/extension.bzl",
         "def _impl(ctx):",
@@ -1267,7 +1267,7 @@
   }
 
   @Test
-  public void skylarkJavaToJavaBinaryAttributes() throws Exception {
+  public void starlarkJavaToJavaBinaryAttributes() throws Exception {
     scratch.file(
         "foo/extension.bzl",
         "def _impl(ctx):",
@@ -1297,7 +1297,7 @@
   }
 
   @Test
-  public void skylarkJavaToJavaImportAttributes() throws Exception {
+  public void starlarkJavaToJavaImportAttributes() throws Exception {
     scratch.file(
         "foo/extension.bzl",
         "def _impl(ctx):",
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/StarlarkJavaLiteProtoLibraryTest.java
similarity index 98%
rename from src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java
rename to src/test/java/com/google/devtools/build/lib/rules/java/proto/StarlarkJavaLiteProtoLibraryTest.java
index 659f7e2..7b5464c 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/StarlarkJavaLiteProtoLibraryTest.java
@@ -54,7 +54,7 @@
 
 /** Tests for the Starlark version of java_lite_proto_library rule. */
 @RunWith(JUnit4.class)
-public class SkylarkJavaLiteProtoLibraryTest extends BuildViewTestCase {
+public class StarlarkJavaLiteProtoLibraryTest extends BuildViewTestCase {
   private static final String RULE_DIRECTORY = "tools/build_rules/java_lite_proto_library";
   private ActionsTestUtil actionsTestUtil;
 
@@ -87,7 +87,7 @@
   }
 
   @Before
-  public final void setupSkylarkRule() throws Exception {
+  public final void setupStarlarkRule() throws Exception {
     setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
 
     File[] files = Runfiles.location(RULE_DIRECTORY).listFiles();
@@ -327,7 +327,7 @@
    * generates.
    */
   @Test
-  public void testJavaProtosExposeSkylarkProviders() throws Exception {
+  public void testJavaProtosExposeStarlarkProviders() throws Exception {
     scratch.file(
         "proto/extensions.bzl",
         "def _impl(ctx):",
@@ -524,7 +524,7 @@
   /** Tests that java_lite_proto_library's aspect exposes a Starlark provider named 'proto_java'. */
   @Test
   @Ignore
-  // TODO(elenairina): Enable this test when proto_java is returned from the aspect in Skylark
+  // TODO(elenairina): Enable this test when proto_java is returned from the aspect in Starlark
   // version of java_lite_proto_library.
   public void testJavaLiteProtoLibraryAspectProviders() throws Exception {
     scratch.file(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinarySkylarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryStarlarkApiTest.java
similarity index 97%
rename from src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinarySkylarkApiTest.java
rename to src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryStarlarkApiTest.java
index 8ef0654..4318e8b 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinarySkylarkApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryStarlarkApiTest.java
@@ -33,7 +33,7 @@
  * using a Starlark stub around the Starlark API.
  */
 @RunWith(JUnit4.class)
-public class AppleBinarySkylarkApiTest extends AppleBinaryTest {
+public class AppleBinaryStarlarkApiTest extends AppleBinaryTest {
 
   static final RuleType RULE_TYPE = new RuleType("apple_binary_skylark") {
     @Override
@@ -44,7 +44,7 @@
     }
 
     @Override
-    public String skylarkLoadPrerequisites() {
+    public String starlarkLoadPrerequisites() {
        return "load('//test_skylark:apple_binary_skylark.bzl', 'apple_binary_skylark')";
     }
   };
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcStararkTest.java
similarity index 83%
rename from src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java
rename to src/test/java/com/google/devtools/build/lib/rules/objc/ObjcStararkTest.java
index fc604ed..4d3db94 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcStararkTest.java
@@ -42,7 +42,7 @@
 
 /** Tests for Starlark interaction with the objc_* rules. */
 @RunWith(JUnit4.class)
-public class ObjcSkylarkTest extends ObjcRuleTestCase {
+public class ObjcStararkTest extends ObjcRuleTestCase {
   private void writeObjcSplitTransitionTestFiles() throws Exception {
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -93,7 +93,7 @@
   }
 
   @Test
-  public void testSkylarkRuleCanDependOnNativeAppleRule() throws Exception {
+  public void testStarlarkRuleCanDependOnNativeAppleRule() throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -123,14 +123,14 @@
         "    hdrs = ['b.h']",
         ")");
 
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
-    StructImpl myInfo = getMyInfoFromTarget(skylarkTarget);
-    Depset skylarkLibraries = (Depset) myInfo.getValue("found_libs");
-    Depset skylarkHdrs = (Depset) myInfo.getValue("found_hdrs");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    StructImpl myInfo = getMyInfoFromTarget(starlarkTarget);
+    Depset starlarkLibraries = (Depset) myInfo.getValue("found_libs");
+    Depset starlarkHdrs = (Depset) myInfo.getValue("found_hdrs");
 
-    assertThat(ActionsTestUtil.baseArtifactNames(skylarkLibraries.getSet(Artifact.class)))
+    assertThat(ActionsTestUtil.baseArtifactNames(starlarkLibraries.getSet(Artifact.class)))
         .contains("liblib.a");
-    assertThat(ActionsTestUtil.baseArtifactNames(skylarkHdrs.getSet(Artifact.class)))
+    assertThat(ActionsTestUtil.baseArtifactNames(starlarkHdrs.getSet(Artifact.class)))
         .contains("b.h");
   }
 
@@ -164,15 +164,15 @@
         "    name = 'dep',",
         ")");
 
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//test:test");
-    StructImpl myInfo = getMyInfoFromTarget(skylarkTarget);
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//test:test");
+    StructImpl myInfo = getMyInfoFromTarget(starlarkTarget);
     Depset defineSet = (Depset) myInfo.getValue("define");
 
     assertThat(defineSet.getSet(String.class).toList()).containsExactly("mock_define");
   }
 
   @Test
-  public void testSkylarkProviderRetrievalNoneIfNoProvider() throws Exception {
+  public void testStarlarkProviderRetrievalNoneIfNoProvider() throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -217,7 +217,7 @@
   }
 
   @Test
-  public void testSkylarkProviderCanCheckForExistanceOfObjcProvider() throws Exception {
+  public void testStarlarkProviderCanCheckForExistanceOfObjcProvider() throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -248,8 +248,8 @@
         "    name = 'cc_lib',",
         "    srcs = ['a.cc'],",
         ")");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
-    StructImpl myInfo = getMyInfoFromTarget(skylarkTarget);
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    StructImpl myInfo = getMyInfoFromTarget(starlarkTarget);
     boolean ccResult = (boolean) myInfo.getValue("cc_has_provider");
     boolean objcResult = (boolean) myInfo.getValue("objc_has_provider");
     assertThat(ccResult).isFalse();
@@ -257,7 +257,7 @@
   }
 
   @Test
-  public void testSkylarkExportsObjcProviderToNativeRulePreMigration() throws Exception {
+  public void testStarlarkExportsObjcProviderToNativeRulePreMigration() throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -309,7 +309,7 @@
   }
 
   @Test
-  public void testSkylarkExportsObjcProviderToNativeRulePostMigration() throws Exception {
+  public void testStarlarkExportsObjcProviderToNativeRulePostMigration() throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -352,7 +352,7 @@
   }
 
   @Test
-  public void testObjcRuleCanDependOnArbitrarySkylarkRuleThatProvidesObjcPreMigration()
+  public void testObjcRuleCanDependOnArbitraryStarlarkRuleThatProvidesObjcPreMigration()
       throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
@@ -389,7 +389,7 @@
   }
 
   @Test
-  public void testObjcRuleCanDependOnArbitrarySkylarkRuleThatProvidesObjcPostMigration()
+  public void testObjcRuleCanDependOnArbitraryStarlarkRuleThatProvidesObjcPostMigration()
       throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
@@ -426,7 +426,7 @@
   }
 
   @Test
-  public void testSkylarkCanAccessAppleConfiguration() throws Exception {
+  public void testStarlarkCanAccessAppleConfiguration() throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -478,8 +478,8 @@
         ")");
 
     useConfiguration("--apple_platform_type=ios", "--cpu=ios_i386", "--xcode_version=7.3");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
-    StructImpl myInfo = getMyInfoFromTarget(skylarkTarget);
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    StructImpl myInfo = getMyInfoFromTarget(starlarkTarget);
 
     Object iosCpu = myInfo.getValue("cpu");
     @SuppressWarnings("unchecked")
@@ -529,9 +529,9 @@
         ")");
 
     useConfiguration();
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
 
-    assertThat(getMyInfoFromTarget(skylarkTarget).getValue("dead_code_report")).isEqualTo("None");
+    assertThat(getMyInfoFromTarget(starlarkTarget).getValue("dead_code_report")).isEqualTo("None");
   }
 
   @Test
@@ -571,13 +571,13 @@
         "dead_code_report(name='dead_code_report')");
 
     useConfiguration("--j2objc_dead_code_report=//examples/apple_skylark:dead_code_report");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
 
-    assertThat(getMyInfoFromTarget(skylarkTarget).getValue("dead_code_report")).isEqualTo("bar");
+    assertThat(getMyInfoFromTarget(starlarkTarget).getValue("dead_code_report")).isEqualTo("bar");
   }
 
   @Test
-  public void testSkylarkCanAccessJ2objcTranslationFlags() throws Exception {
+  public void testStarlarkCanAccessJ2objcTranslationFlags() throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -602,16 +602,17 @@
         ")");
 
     useConfiguration("--j2objc_translation_flags=-DTestJ2ObjcFlag");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
 
     @SuppressWarnings("unchecked")
-    List<String> flags = (List<String>) getMyInfoFromTarget(skylarkTarget).getValue("j2objc_flags");
+    List<String> flags = (List<String>) getMyInfoFromTarget(starlarkTarget)
+        .getValue("j2objc_flags");
     assertThat(flags).contains("-DTestJ2ObjcFlag");
     assertThat(flags).doesNotContain("-unspecifiedFlag");
   }
 
   @Test
-  public void testSkylarkCanAccessApplePlatformNames() throws Exception {
+  public void testStarlarkCanAccessApplePlatformNames() throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -635,14 +636,14 @@
         ")");
 
     useConfiguration("--cpu=ios_i386");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
 
-    Object name = getMyInfoFromTarget(skylarkTarget).getValue("name");
+    Object name = getMyInfoFromTarget(starlarkTarget).getValue("name");
     assertThat(name).isEqualTo("iPhoneSimulator");
   }
 
   @Test
-  public void testSkylarkCanAccessAppleToolchain() throws Exception {
+  public void testStarlarkCanAccessAppleToolchain() throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -671,8 +672,8 @@
         ")");
 
     useConfiguration("--apple_platform_type=ios", "--cpu=ios_i386");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
-    StructImpl myInfo = getMyInfoFromTarget(skylarkTarget);
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    StructImpl myInfo = getMyInfoFromTarget(starlarkTarget);
 
     String platformDevFrameworksDir = (String) myInfo.getValue("platform_developer_framework_dir");
     String sdkDir = (String) myInfo.getValue("sdk_dir");
@@ -685,7 +686,7 @@
   }
 
   @Test
-  public void testSkylarkCanAccessSdkAndMinimumOs() throws Exception {
+  public void testStarlarkCanAccessSdkAndMinimumOs() throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -736,8 +737,8 @@
         "--watchos_sdk_version=2.1", "--watchos_minimum_os=2.0",
         "--tvos_sdk_version=3.1", "--tvos_minimum_os=3.0",
         "--macos_sdk_version=4.1");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
-    StructImpl myInfo = getMyInfoFromTarget(skylarkTarget);
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    StructImpl myInfo = getMyInfoFromTarget(starlarkTarget);
 
     assertThat(myInfo.getValue("ios_sdk_version")).isEqualTo("1.1");
     assertThat(myInfo.getValue("ios_minimum_os")).isEqualTo("1.0");
@@ -751,8 +752,8 @@
         "--watchos_sdk_version=2.1",
         "--tvos_sdk_version=3.1",
         "--macos_sdk_version=4.1");
-    skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
-    myInfo = getMyInfoFromTarget(skylarkTarget);
+    starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    myInfo = getMyInfoFromTarget(starlarkTarget);
 
     assertThat(myInfo.getValue("ios_sdk_version")).isEqualTo("1.1");
     assertThat(myInfo.getValue("ios_minimum_os")).isEqualTo("1.1");
@@ -764,7 +765,7 @@
   }
 
   @Test
-  public void testSkylarkCanAccessObjcConfiguration() throws Exception {
+  public void testStarlarkCanAccessObjcConfiguration() throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/objc_rules.bzl",
@@ -805,8 +806,8 @@
         "--ios_simulator_version=8.4",
         "--ios_signing_cert_name='Apple Developer'",
         "--apple_generate_dsym");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/objc_skylark:my_target");
-    StructImpl myInfo = getMyInfoFromTarget(skylarkTarget);
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/objc_skylark:my_target");
+    StructImpl myInfo = getMyInfoFromTarget(starlarkTarget);
 
     @SuppressWarnings("unchecked")
     List<String> copts = (List<String>) myInfo.getValue("copts");
@@ -850,10 +851,10 @@
         "   name='my_target',",
         ")");
 
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/objc_skylark:my_target");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/objc_skylark:my_target");
 
     Object signingCertificateName =
-        getMyInfoFromTarget(skylarkTarget).getValue("signing_certificate_name");
+        getMyInfoFromTarget(starlarkTarget).getValue("signing_certificate_name");
     assertThat(signingCertificateName).isEqualTo("None");
   }
 
@@ -883,10 +884,10 @@
         ")");
 
     useConfiguration("--compilation_mode=dbg");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/objc_skylark:my_target");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/objc_skylark:my_target");
 
     boolean usesDeviceDebugEntitlements =
-        (boolean) getMyInfoFromTarget(skylarkTarget).getValue("uses_device_debug_entitlements");
+        (boolean) getMyInfoFromTarget(starlarkTarget).getValue("uses_device_debug_entitlements");
     assertThat(usesDeviceDebugEntitlements).isTrue();
   }
 
@@ -918,10 +919,10 @@
     useConfiguration(
         "--compilation_mode=dbg",
         "--nodevice_debug_entitlements");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/objc_skylark:my_target");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/objc_skylark:my_target");
 
     boolean usesDeviceDebugEntitlements =
-        (boolean) getMyInfoFromTarget(skylarkTarget).getValue("uses_device_debug_entitlements");
+        (boolean) getMyInfoFromTarget(starlarkTarget).getValue("uses_device_debug_entitlements");
     assertThat(usesDeviceDebugEntitlements).isFalse();
   }
 
@@ -951,14 +952,14 @@
         ")");
 
     useConfiguration("--compilation_mode=opt");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/objc_skylark:my_target");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/objc_skylark:my_target");
 
     boolean usesDeviceDebugEntitlements =
-        (boolean) getMyInfoFromTarget(skylarkTarget).getValue("uses_device_debug_entitlements");
+        (boolean) getMyInfoFromTarget(starlarkTarget).getValue("uses_device_debug_entitlements");
     assertThat(usesDeviceDebugEntitlements).isFalse();
   }
 
-  private ConfiguredTarget createObjcProviderSkylarkTarget(String... implLines) throws Exception {
+  private ConfiguredTarget createObjcProviderStarlarkTarget(String... implLines) throws Exception {
     String[] impl =
         ObjectArrays.concat(
             ObjectArrays.concat("def swift_binary_impl(ctx):", implLines),
@@ -992,9 +993,9 @@
   }
 
   @Test
-  public void testSkylarkCanCreateObjcProviderFromScratch() throws Exception {
-    ConfiguredTarget skylarkTarget =
-        createObjcProviderSkylarkTarget(
+  public void testStarlarkCanCreateObjcProviderFromScratch() throws Exception {
+    ConfiguredTarget starlarkTarget =
+        createObjcProviderStarlarkTarget(
             "   defines = depset(['define1', 'define2'])",
             "   linkopts = depset(['somelinkopt'])",
             "   created_provider = apple_common.new_objc_provider\\",
@@ -1002,11 +1003,11 @@
             "   return [created_provider]");
 
     Iterable<String> foundLinkopts =
-        skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).get(ObjcProvider.LINKOPT).toList();
+        starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).get(ObjcProvider.LINKOPT).toList();
     Iterable<String> foundDefines =
-        skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).define().toList();
+        starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).define().toList();
     boolean usesSwift =
-        skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).is(ObjcProvider.Flag.USES_SWIFT);
+        starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).is(ObjcProvider.Flag.USES_SWIFT);
 
     assertThat(foundLinkopts).containsExactly("somelinkopt");
     assertThat(foundDefines).containsExactly("define1", "define2");
@@ -1014,9 +1015,9 @@
   }
 
   @Test
-  public void testSkylarkCanPassLinkInputsInObjcProvider() throws Exception {
-    ConfiguredTarget skylarkTarget =
-        createObjcProviderSkylarkTarget(
+  public void testStarlarkCanPassLinkInputsInObjcProvider() throws Exception {
+    ConfiguredTarget starlarkTarget =
+        createObjcProviderStarlarkTarget(
             "   file = ctx.actions.declare_file('foo.ast')",
             "   ctx.actions.run_shell(outputs=[file], command='echo')",
             "   link_inputs = depset([file])",
@@ -1025,42 +1026,42 @@
             "   return [created_provider]");
 
     NestedSet<Artifact> foundLinkInputs =
-        skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).get(ObjcProvider.LINK_INPUTS);
+        starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).get(ObjcProvider.LINK_INPUTS);
     assertThat(ActionsTestUtil.baseArtifactNames(foundLinkInputs)).contains("foo.ast");
   }
 
   @Test
-  public void testSkylarkCanPassUsesSwiftFlag() throws Exception {
-    ConfiguredTarget skylarkTarget =
-        createObjcProviderSkylarkTarget(
+  public void testStarlarkCanPassUsesSwiftFlag() throws Exception {
+    ConfiguredTarget starlarkTarget =
+        createObjcProviderStarlarkTarget(
             "   created_provider = apple_common.new_objc_provider(uses_swift=True)",
             "   return [created_provider]");
 
     boolean usesSwift =
-        skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).is(ObjcProvider.Flag.USES_SWIFT);
+        starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).is(ObjcProvider.Flag.USES_SWIFT);
 
     assertThat(usesSwift).isTrue();
   }
 
   @Test
-  public void testSkylarkCanCreateObjcProviderWithDefines() throws Exception {
-    ConfiguredTarget skylarkTarget =
-        createObjcProviderSkylarkTarget(
+  public void testStarlarkCanCreateObjcProviderWithDefines() throws Exception {
+    ConfiguredTarget starlarkTarget =
+        createObjcProviderStarlarkTarget(
             "   define = depset(['def1', 'def2', 'def3'])",
             "   created_provider = apple_common.new_objc_provider\\",
             "(define=define)",
             "   return [created_provider]");
 
     Iterable<String> foundDefines =
-        skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).define().toList();
+        starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).define().toList();
 
     assertThat(foundDefines).containsExactly("def1", "def2", "def3");
   }
 
   @Test
-  public void testSkylarkCanCreateObjcProviderWithHeaders() throws Exception {
-    ConfiguredTarget skylarkTarget =
-        createObjcProviderSkylarkTarget(
+  public void testStarlarkCanCreateObjcProviderWithHeaders() throws Exception {
+    ConfiguredTarget starlarkTarget =
+        createObjcProviderStarlarkTarget(
             "   hdr1 = ctx.actions.declare_file('hdr1')",
             "   hdr2 = ctx.actions.declare_file('hdr2')",
             "   ctx.actions.run_shell(outputs=[hdr1, hdr2], command='echo')",
@@ -1070,22 +1071,22 @@
             "   return [created_provider]");
 
     Iterable<Artifact> foundHeaders =
-        skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).header().toList();
+        starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).header().toList();
 
     assertThat(ActionsTestUtil.baseArtifactNames(foundHeaders)).containsExactly("hdr1", "hdr2");
   }
 
   @Test
-  public void testSkylarkCanCreateObjcProviderWithIncludePathFragments() throws Exception {
-    ConfiguredTarget skylarkTarget =
-        createObjcProviderSkylarkTarget(
+  public void testStarlarkCanCreateObjcProviderWithIncludePathFragments() throws Exception {
+    ConfiguredTarget starlarkTarget =
+        createObjcProviderStarlarkTarget(
             "   includes = depset(['path1', 'path_dir/path2', 'path_dir1/path_dir2/path3'])",
             "   created_provider = apple_common.new_objc_provider\\",
             "(include=includes)",
             "   return [created_provider]");
 
     Iterable<PathFragment> foundIncludes =
-        skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).include();
+        starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).include();
 
     assertThat(foundIncludes)
         .containsExactly(
@@ -1095,32 +1096,32 @@
   }
 
   @Test
-  public void testSkylarkCanCreateObjcProviderWithFrameworkIncludes() throws Exception {
-    ConfiguredTarget skylarkTarget =
-        createObjcProviderSkylarkTarget(
+  public void testStarlarkCanCreateObjcProviderWithFrameworkIncludes() throws Exception {
+    ConfiguredTarget starlarkTarget =
+        createObjcProviderStarlarkTarget(
             "   includes = depset(['path1/foo.framework', 'path_dir/path2/bar.framework'])",
             "   created_provider = apple_common.new_objc_provider\\",
             "(framework_search_paths=includes)",
             "   return [created_provider]");
 
     Iterable<PathFragment> foundIncludes =
-        skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).frameworkInclude();
+        starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).frameworkInclude();
 
     assertThat(foundIncludes)
         .containsExactly(PathFragment.create("path1"), PathFragment.create("path_dir/path2"));
   }
 
   @Test
-  public void testSkylarkCanCreateObjcProviderWithSystemIncludes() throws Exception {
-    ConfiguredTarget skylarkTarget =
-        createObjcProviderSkylarkTarget(
+  public void testStarlarkCanCreateObjcProviderWithSystemIncludes() throws Exception {
+    ConfiguredTarget starlarkTarget =
+        createObjcProviderStarlarkTarget(
             "   includes = depset(['path1', 'path_dir/path2', 'path_dir1/path_dir2/path3'])",
             "   created_provider = apple_common.new_objc_provider\\",
             "(include_system=includes)",
             "   return [created_provider]");
 
     Iterable<PathFragment> foundIncludes =
-        skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).systemInclude();
+        starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).systemInclude();
 
     assertThat(foundIncludes)
         .containsExactly(
@@ -1130,16 +1131,16 @@
   }
 
   @Test
-  public void testSkylarkCanCreateObjcProviderWithQuoteIncludes() throws Exception {
-    ConfiguredTarget skylarkTarget =
-        createObjcProviderSkylarkTarget(
+  public void testStarlarkCanCreateObjcProviderWithQuoteIncludes() throws Exception {
+    ConfiguredTarget starlarkTarget =
+        createObjcProviderStarlarkTarget(
             "   includes = depset(['path1', 'path_dir/path2', 'path_dir1/path_dir2/path3'])",
             "   created_provider = apple_common.new_objc_provider\\",
             "(iquote=includes)",
             "   return [created_provider]");
 
     Iterable<PathFragment> foundIncludes =
-        skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).quoteInclude();
+        starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).quoteInclude();
 
     assertThat(foundIncludes)
         .containsExactly(
@@ -1149,10 +1150,10 @@
   }
 
   @Test
-  public void testSkylarkCanCreateObjcProviderWithStrictDepsPreMigration() throws Exception {
+  public void testStarlarkCanCreateObjcProviderWithStrictDepsPreMigration() throws Exception {
     useConfiguration("--incompatible_objc_compile_info_migration=false");
-    ConfiguredTarget skylarkTarget =
-        createObjcProviderSkylarkTarget(
+    ConfiguredTarget starlarkTarget =
+        createObjcProviderStarlarkTarget(
             "   strict_includes = depset(['path1'])",
             "   propagated_includes = depset(['path2'])",
             "   strict_provider = apple_common.new_objc_provider\\",
@@ -1161,10 +1162,10 @@
             "(include=propagated_includes, direct_dep_providers=[strict_provider])",
             "   return [created_provider]");
 
-    ObjcProvider skylarkProvider = skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR);
-    assertThat(skylarkProvider.include())
+    ObjcProvider starlarkProvider = starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR);
+    assertThat(starlarkProvider.include())
         .containsExactly(PathFragment.create("path1"), PathFragment.create("path2"));
-    assertThat(skylarkProvider.getStrictDependencyIncludes())
+    assertThat(starlarkProvider.getStrictDependencyIncludes())
         .containsExactly(PathFragment.create("path1"));
 
     scratch.file(
@@ -1178,24 +1179,24 @@
         "   deps = [':direct_dep']",
         ")");
 
-    ObjcProvider skylarkProviderDirectDepender =
+    ObjcProvider starlarkProviderDirectDepender =
         getConfiguredTarget("//examples/objc_skylark2:direct_dep")
             .get(ObjcProvider.STARLARK_CONSTRUCTOR);
-    assertThat(skylarkProviderDirectDepender.include())
+    assertThat(starlarkProviderDirectDepender.include())
         .containsExactly(PathFragment.create("path2"));
 
-    ObjcProvider skylarkProviderIndirectDepender =
+    ObjcProvider starlarkProviderIndirectDepender =
         getConfiguredTarget("//examples/objc_skylark2:indirect_dep")
             .get(ObjcProvider.STARLARK_CONSTRUCTOR);
-    assertThat(skylarkProviderIndirectDepender.include())
+    assertThat(starlarkProviderIndirectDepender.include())
         .containsExactly(PathFragment.create("path2"));
   }
 
   @Test
-  public void testSkylarkCanCreateObjcProviderWithStrictDepsPostMigration() throws Exception {
+  public void testStarlarkCanCreateObjcProviderWithStrictDepsPostMigration() throws Exception {
     useConfiguration("--incompatible_objc_compile_info_migration=true");
-    ConfiguredTarget skylarkTarget =
-        createObjcProviderSkylarkTarget(
+    ConfiguredTarget starlarkTarget =
+        createObjcProviderStarlarkTarget(
             "   strict_includes = depset(['path1'])",
             "   propagated_includes = depset(['path2'])",
             "   strict_provider = apple_common.new_objc_provider\\",
@@ -1204,10 +1205,10 @@
             "(include=propagated_includes, direct_dep_providers=[strict_provider])",
             "   return [created_provider]");
 
-    ObjcProvider skylarkProvider = skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR);
-    assertThat(skylarkProvider.include())
+    ObjcProvider starlarkProvider = starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR);
+    assertThat(starlarkProvider.include())
         .containsExactly(PathFragment.create("path1"), PathFragment.create("path2"));
-    assertThat(skylarkProvider.getStrictDependencyIncludes())
+    assertThat(starlarkProvider.getStrictDependencyIncludes())
         .containsExactly(PathFragment.create("path1"));
 
     scratch.file(
@@ -1217,23 +1218,23 @@
         "   deps = ['//examples/objc_skylark:my_target']",
         ")");
 
-    ObjcProvider skylarkProviderDirectDepender =
+    ObjcProvider starlarkProviderDirectDepender =
         getConfiguredTarget("//examples/objc_skylark2:direct_dep")
             .get(ObjcProvider.STARLARK_CONSTRUCTOR);
-    assertThat(skylarkProviderDirectDepender.include()).isEmpty();
+    assertThat(starlarkProviderDirectDepender.include()).isEmpty();
   }
 
   @Test
-  public void testSkylarkCanCreateObjcProviderWithStrictDepsDirectly() throws Exception {
-    ConfiguredTarget skylarkTarget =
-        createObjcProviderSkylarkTarget(
+  public void testStarlarkCanCreateObjcProviderWithStrictDepsDirectly() throws Exception {
+    ConfiguredTarget starlarkTarget =
+        createObjcProviderStarlarkTarget(
             "   strict_includes = depset(['path'])",
             "   created_provider = apple_common.new_objc_provider\\",
             "(strict_include=strict_includes)",
             "   return [created_provider]");
 
-    ObjcProvider skylarkProvider = skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR);
-    assertThat(skylarkProvider.getStrictDependencyIncludes())
+    ObjcProvider starlarkProvider = starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR);
+    assertThat(starlarkProvider.getStrictDependencyIncludes())
         .containsExactly(PathFragment.create("path"));
 
     scratch.file(
@@ -1243,19 +1244,19 @@
         "   deps = ['//examples/objc_skylark:my_target']",
         ")");
 
-    ObjcProvider skylarkProviderDirectDepender =
+    ObjcProvider starlarkProviderDirectDepender =
         getConfiguredTarget("//examples/objc_skylark2:direct_dep")
             .get(ObjcProvider.STARLARK_CONSTRUCTOR);
-    assertThat(skylarkProviderDirectDepender.getStrictDependencyIncludes()).isEmpty();
+    assertThat(starlarkProviderDirectDepender.getStrictDependencyIncludes()).isEmpty();
   }
 
   @Test
-  public void testSkylarkStrictDepsDoesNotSupportDefine() throws Exception {
+  public void testStarlarkStrictDepsDoesNotSupportDefine() throws Exception {
     AssertionError e =
         assertThrows(
             AssertionError.class,
             () ->
-                createObjcProviderSkylarkTarget(
+                createObjcProviderStarlarkTarget(
                     "   strict_defines = depset(['def1'])",
                     "   strict_provider = apple_common.new_objc_provider\\",
                     "(define=strict_defines)",
@@ -1268,12 +1269,12 @@
   }
 
   @Test
-  public void testSkylarkStrictDepsDoesNotSupportLinkopt() throws Exception {
+  public void testStarlarkStrictDepsDoesNotSupportLinkopt() throws Exception {
     AssertionError e =
         assertThrows(
             AssertionError.class,
             () ->
-                createObjcProviderSkylarkTarget(
+                createObjcProviderStarlarkTarget(
                     "   strict_linkopts = depset(['opt1'])",
                     "   strict_provider = apple_common.new_objc_provider\\",
                     "(linkopt=strict_linkopts)",
@@ -1286,9 +1287,9 @@
   }
 
   @Test
-  public void testSkylarkCanCreateObjcProviderFromObjcProvider() throws Exception {
-    ConfiguredTarget skylarkTarget =
-        createObjcProviderSkylarkTarget(
+  public void testStarlarkCanCreateObjcProviderFromObjcProvider() throws Exception {
+    ConfiguredTarget starlarkTarget =
+        createObjcProviderStarlarkTarget(
             "   dep = ctx.attr.deps[0]",
             "   define = depset(['define_from_impl'])",
             "   created_provider = apple_common.new_objc_provider\\",
@@ -1296,18 +1297,18 @@
             "   return [created_provider]");
 
     Iterable<String> foundStrings =
-        skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).define().toList();
+        starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR).define().toList();
 
     assertThat(foundStrings).containsExactly("define_from_dep", "define_from_impl");
   }
 
   @Test
-  public void testSkylarkErrorOnBadObjcProviderInputKey() throws Exception {
+  public void testStarlarkErrorOnBadObjcProviderInputKey() throws Exception {
     AssertionError e =
         assertThrows(
             AssertionError.class,
             () ->
-                createObjcProviderSkylarkTarget(
+                createObjcProviderStarlarkTarget(
                     "   created_provider = apple_common.new_objc_provider(foo=depset(['bar']))",
                     "   return created_provider"));
     assertThat(e)
@@ -1316,24 +1317,24 @@
   }
 
   @Test
-  public void testSkylarkErrorOnNonSetObjcProviderInputValue() throws Exception {
+  public void testStarlarkErrorOnNonSetObjcProviderInputValue() throws Exception {
     AssertionError e =
         assertThrows(
             AssertionError.class,
             () ->
-                createObjcProviderSkylarkTarget(
+                createObjcProviderStarlarkTarget(
                     "   created_provider = apple_common.new_objc_provider(library='bar')",
                     "   return created_provider"));
     assertThat(e).hasMessageThat().contains("for library, got string, want a depset of File");
   }
 
   @Test
-  public void testSkylarkErrorOnObjcProviderInputValueWrongSetType() throws Exception {
+  public void testStarlarkErrorOnObjcProviderInputValueWrongSetType() throws Exception {
     AssertionError e =
         assertThrows(
             AssertionError.class,
             () ->
-                createObjcProviderSkylarkTarget(
+                createObjcProviderStarlarkTarget(
                     "   created_provider = apple_common.new_objc_provider(library=depset(['bar']))",
                     "   return created_provider"));
     assertThat(e)
@@ -1342,12 +1343,12 @@
   }
 
   @Test
-  public void testSkylarkErrorOnNonIterableObjcProviderProviderValue() throws Exception {
+  public void testStarlarkErrorOnNonIterableObjcProviderProviderValue() throws Exception {
     AssertionError e =
         assertThrows(
             AssertionError.class,
             () ->
-                createObjcProviderSkylarkTarget(
+                createObjcProviderStarlarkTarget(
                     "   created_provider = apple_common.new_objc_provider(providers='bar')",
                     "   return created_provider"));
     assertThat(e)
@@ -1356,12 +1357,12 @@
   }
 
   @Test
-  public void testSkylarkErrorOnBadIterableObjcProviderProviderValue() throws Exception {
+  public void testStarlarkErrorOnBadIterableObjcProviderProviderValue() throws Exception {
     AssertionError e =
         assertThrows(
             AssertionError.class,
             () ->
-                createObjcProviderSkylarkTarget(
+                createObjcProviderStarlarkTarget(
                     "   created_provider = apple_common.new_objc_provider(providers=['bar'])",
                     "   return created_provider"));
     assertThat(e)
@@ -1400,13 +1401,13 @@
         "   name = 'lib',",
         "   srcs = ['a.m'],",
         ")");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
-    Depset emptyValue = (Depset) getMyInfoFromTarget(skylarkTarget).getValue("empty_value");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    Depset emptyValue = (Depset) getMyInfoFromTarget(starlarkTarget).getValue("empty_value");
     assertThat(emptyValue.toList()).isEmpty();
   }
 
   @Test
-  public void testSkylarkCanAccessSdkFrameworks() throws Exception {
+  public void testStarlarkCanAccessSdkFrameworks() throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -1436,14 +1437,14 @@
         "    deps = [':lib'],",
         ")");
 
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
 
-    Depset sdkFrameworks = (Depset) getMyInfoFromTarget(skylarkTarget).getValue("sdk_frameworks");
+    Depset sdkFrameworks = (Depset) getMyInfoFromTarget(starlarkTarget).getValue("sdk_frameworks");
     assertThat(sdkFrameworks.toList()).containsAtLeast("Accelerate", "GLKit");
   }
 
   @Test
-  public void testSkylarkCanAccessAndUseApplePlatformTypes() throws Exception {
+  public void testStarlarkCanAccessAndUseApplePlatformTypes() throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -1473,8 +1474,8 @@
         "--ios_multi_cpus=arm64,armv7",
         "--watchos_cpus=armv7k",
         "--tvos_cpus=arm64");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
-    StructImpl myInfo = getMyInfoFromTarget(skylarkTarget);
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    StructImpl myInfo = getMyInfoFromTarget(starlarkTarget);
 
     Object iosPlatform = myInfo.getValue("ios_platform");
     Object watchosPlatform = myInfo.getValue("watchos_platform");
@@ -1510,9 +1511,9 @@
 
     useConfiguration(
         "--ios_multi_cpus=arm64,armv7");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
 
-    Boolean isDevice = (Boolean) getMyInfoFromTarget(skylarkTarget).getValue("is_device");
+    Boolean isDevice = (Boolean) getMyInfoFromTarget(starlarkTarget).getValue("is_device");
     assertThat(isDevice).isTrue();
   }
 
@@ -1539,21 +1540,21 @@
         "    name = 'my_target',",
         ")");
 
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
 
-    Boolean isDevice = (Boolean) getMyInfoFromTarget(skylarkTarget).getValue("is_device");
+    Boolean isDevice = (Boolean) getMyInfoFromTarget(starlarkTarget).getValue("is_device");
     assertThat(isDevice).isFalse();
   }
 
   @Test
-  public void testSkylarkWithRunMemleaksEnabled() throws Exception {
+  public void testStarlarkWithRunMemleaksEnabled() throws Exception {
     useConfiguration("--ios_memleaks");
-    checkSkylarkRunMemleaksWithExpectedValue(true);
+    checkStarlarkRunMemleaksWithExpectedValue(true);
   }
 
   @Test
-  public void testSkylarkWithRunMemleaksDisabled() throws Exception {
-    checkSkylarkRunMemleaksWithExpectedValue(false);
+  public void testStarlarkWithRunMemleaksDisabled() throws Exception {
+    checkStarlarkRunMemleaksWithExpectedValue(false);
   }
 
   @Test
@@ -1578,9 +1579,9 @@
         "    name = 'my_target',",
         ")");
 
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
 
-    DottedVersion version = (DottedVersion) getMyInfoFromTarget(skylarkTarget).getValue("version");
+    DottedVersion version = (DottedVersion) getMyInfoFromTarget(starlarkTarget).getValue("version");
     assertThat(version).isEqualTo(DottedVersion.fromString("5.4"));
   }
 
@@ -1619,7 +1620,7 @@
    * of retrieving ObjcProvider.
    */
   @Test
-  public void testObjcProviderSkylarkConstructor() throws Exception {
+  public void testObjcProviderStarlarkConstructor() throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -1646,8 +1647,8 @@
         "    hdrs = ['a.h']",
         ")");
 
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
-    assertThat(skylarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR)).isNotNull();
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    assertThat(starlarkTarget.get(ObjcProvider.STARLARK_CONSTRUCTOR)).isNotNull();
   }
 
   @Test
@@ -1656,8 +1657,8 @@
     writeObjcSplitTransitionTestFiles();
 
     useConfiguration("--ios_multi_cpus=armv7,arm64");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
-    StructImpl myInfo = getMyInfoFromTarget(skylarkTarget);
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    StructImpl myInfo = getMyInfoFromTarget(starlarkTarget);
     ObjcProvider armv7Objc =
         ((StarlarkInfo) myInfo.getValue("ios_armv7")).getValue("objc", ObjcProvider.class);
     ObjcProvider arm64Objc =
@@ -1676,8 +1677,8 @@
     writeObjcSplitTransitionTestFiles();
 
     useConfiguration("--ios_multi_cpus=armv7,arm64,armv7");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
-    StructImpl myInfo = getMyInfoFromTarget(skylarkTarget);
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    StructImpl myInfo = getMyInfoFromTarget(starlarkTarget);
     ObjcProvider armv7Objc =
         ((StarlarkInfo) myInfo.getValue("ios_armv7")).getValue("objc", ObjcProvider.class);
     ObjcProvider arm64Objc =
@@ -1696,8 +1697,8 @@
     writeObjcSplitTransitionTestFiles();
 
     useConfiguration("--cpu=ios_arm64");
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
-    StructImpl myInfo = getMyInfoFromTarget(skylarkTarget);
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    StructImpl myInfo = getMyInfoFromTarget(starlarkTarget);
     ObjcProvider arm64Objc =
         ((StarlarkInfo) myInfo.getValue("ios_arm64")).getValue("objc", ObjcProvider.class);
     assertThat(arm64Objc).isNotNull();
@@ -1705,7 +1706,7 @@
         .contains("ios_arm64");
   }
 
-  private void checkSkylarkRunMemleaksWithExpectedValue(boolean expectedValue) throws Exception {
+  private void checkStarlarkRunMemleaksWithExpectedValue(boolean expectedValue) throws Exception {
     scratch.file("examples/rule/BUILD");
     scratch.file(
         "examples/rule/apple_rules.bzl",
@@ -1725,9 +1726,9 @@
         "    name = 'my_target',",
         ")");
 
-    ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
+    ConfiguredTarget starlarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
 
-    boolean runMemleaks = (boolean) getMyInfoFromTarget(skylarkTarget).getValue("run_memleaks");
+    boolean runMemleaks = (boolean) getMyInfoFromTarget(starlarkTarget).getValue("run_memleaks");
     assertThat(runMemleaks).isEqualTo(expectedValue);
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/RuleType.java b/src/test/java/com/google/devtools/build/lib/rules/objc/RuleType.java
index 72dc3fb..ab19fea 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/RuleType.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/RuleType.java
@@ -157,7 +157,7 @@
       Scratch scratch, String... checkSpecificAttrs)
       throws IOException {
     String target = target(scratch, packageDir, targetName, checkSpecificAttrs);
-    scratch.file(packageDir + "/BUILD", skylarkLoadPrerequisites() + "\n" + target);
+    scratch.file(packageDir + "/BUILD", starlarkLoadPrerequisites() + "\n" + target);
     return target;
   }
 
@@ -168,7 +168,7 @@
    * <p>Subclasses of {@link RuleType} should override this method if using the rule requires
    * Starlark files to be loaded.
    */
-  public String skylarkLoadPrerequisites() {
+  public String starlarkLoadPrerequisites() {
     return "";
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java b/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java
index 7c4281b..5903414 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java
@@ -105,7 +105,7 @@
   private SequentialBuildDriver driver;
   private TestManagedDirectoriesKnowledge managedDirectoriesKnowledge;
   private RecordingDifferencer differencer;
-  private TestStarlarkRepositoryFunction testSkylarkRepositoryFunction;
+  private TestStarlarkRepositoryFunction testStarlarkRepositoryFunction;
   private Path rootPath;
 
   @Before
@@ -120,14 +120,14 @@
     managedDirectoriesKnowledge = new TestManagedDirectoriesKnowledge();
     DownloadManager downloader = Mockito.mock(DownloadManager.class);
     RepositoryFunction localRepositoryFunction = new LocalRepositoryFunction();
-    testSkylarkRepositoryFunction =
+    testStarlarkRepositoryFunction =
         new TestStarlarkRepositoryFunction(rootPath, downloader, managedDirectoriesKnowledge);
     ImmutableMap<String, RepositoryFunction> repositoryHandlers =
         ImmutableMap.of(LocalRepositoryRule.NAME, localRepositoryFunction);
     delegatorFunction =
         new RepositoryDelegatorFunction(
             repositoryHandlers,
-            testSkylarkRepositoryFunction,
+            testStarlarkRepositoryFunction,
             new AtomicBoolean(true),
             ImmutableMap::of,
             directories,
@@ -333,20 +333,20 @@
 
     loadRepo("repo1");
 
-    assertThat(testSkylarkRepositoryFunction.isFetchCalled()).isTrue();
-    testSkylarkRepositoryFunction.reset();
+    assertThat(testStarlarkRepositoryFunction.isFetchCalled()).isTrue();
+    testStarlarkRepositoryFunction.reset();
 
     loadRepo("repo1");
     // Nothing changed, fetch does not happen.
-    assertThat(testSkylarkRepositoryFunction.isFetchCalled()).isFalse();
-    testSkylarkRepositoryFunction.reset();
+    assertThat(testStarlarkRepositoryFunction.isFetchCalled()).isFalse();
+    testStarlarkRepositoryFunction.reset();
 
     // Delete managed directory, fetch should happen again.
     Path managedDirectory = rootPath.getRelative("dir1");
     managedDirectory.deleteTree();
     loadRepo("repo1");
-    assertThat(testSkylarkRepositoryFunction.isFetchCalled()).isTrue();
-    testSkylarkRepositoryFunction.reset();
+    assertThat(testStarlarkRepositoryFunction.isFetchCalled()).isTrue();
+    testStarlarkRepositoryFunction.reset();
 
     // Change managed directories declaration, fetch should happen.
     // NB: we are making sure that managed directories exist to check only the declaration changes
@@ -362,14 +362,14 @@
             RepositoryName.create("@repo1")));
     loadRepo("repo1");
 
-    assertThat(testSkylarkRepositoryFunction.isFetchCalled()).isTrue();
-    testSkylarkRepositoryFunction.reset();
+    assertThat(testStarlarkRepositoryFunction.isFetchCalled()).isTrue();
+    testStarlarkRepositoryFunction.reset();
 
     managedDirectoriesKnowledge.setManagedDirectories(ImmutableMap.of());
     loadRepo("repo1");
 
-    assertThat(testSkylarkRepositoryFunction.isFetchCalled()).isTrue();
-    testSkylarkRepositoryFunction.reset();
+    assertThat(testStarlarkRepositoryFunction.isFetchCalled()).isTrue();
+    testStarlarkRepositoryFunction.reset();
   }
 
   private void loadRepo(String strippedRepoName) throws InterruptedException {
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkFileContentHashTests.java b/src/test/java/com/google/devtools/build/lib/skyframe/StarlarkFileContentHashTests.java
similarity index 98%
rename from src/test/java/com/google/devtools/build/lib/skyframe/SkylarkFileContentHashTests.java
rename to src/test/java/com/google/devtools/build/lib/skyframe/StarlarkFileContentHashTests.java
index 0f2b9ee..013b9dc 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkFileContentHashTests.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/StarlarkFileContentHashTests.java
@@ -45,7 +45,7 @@
  * the imports of their respective definition SkylarkEnvironments.
  */
 @RunWith(JUnit4.class)
-public class SkylarkFileContentHashTests extends BuildViewTestCase {
+public class StarlarkFileContentHashTests extends BuildViewTestCase {
 
   @Before
   public final void createFiles() throws Exception  {
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkActionProviderTest.java b/src/test/java/com/google/devtools/build/lib/skylark/StarlarkActionProviderTest.java
similarity index 99%
rename from src/test/java/com/google/devtools/build/lib/skylark/SkylarkActionProviderTest.java
rename to src/test/java/com/google/devtools/build/lib/skylark/StarlarkActionProviderTest.java
index 3df8e8b..36f7e00 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkActionProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/StarlarkActionProviderTest.java
@@ -38,7 +38,7 @@
 
 /** Tests for the Starlark-accessible actions provider on rule configured targets. */
 @RunWith(JUnit4.class)
-public class SkylarkActionProviderTest extends AnalysisTestCase {
+public class StarlarkActionProviderTest extends AnalysisTestCase {
 
   @Test
   public void aspectGetsActionProviderForNativeRule() throws Exception {
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAnnotationContractTest.java b/src/test/java/com/google/devtools/build/lib/skylark/StarlarkAnnotationContractTest.java
similarity index 96%
rename from src/test/java/com/google/devtools/build/lib/skylark/SkylarkAnnotationContractTest.java
rename to src/test/java/com/google/devtools/build/lib/skylark/StarlarkAnnotationContractTest.java
index 26ffb9e..36b699c 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAnnotationContractTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/StarlarkAnnotationContractTest.java
@@ -33,7 +33,7 @@
  * don't have access to the full set of information that the java reflection API has.
  */
 @RunWith(JUnit4.class)
-public class SkylarkAnnotationContractTest {
+public class StarlarkAnnotationContractTest {
 
   // Common prefix of packages in bazel that may have classes that implement or extend a
   // Starlark type.
@@ -46,7 +46,7 @@
    * <p>If this test fails, it indicates the following error scenario:
    *
    * <p>Suppose class A is a subclass of both B and C, where B and C are annotated with {@link
-   * StarlarkBuiltin} annotations (and are thus considered "skylark types"). If B is not a subclass
+   * StarlarkBuiltin} annotations (and are thus considered "Starlark types"). If B is not a subclass
    * of C (nor visa versa), then it's impossible to resolve whether A is of type B or if A is of
    * type C. It's both! The way to resolve this is usually to have A be its own type (annotated with
    * {@link StarlarkBuiltin}), and thus have the explicit type of A be semantically "B and C".
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/skylark/StarlarkIntegrationTest.java
similarity index 99%
rename from src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
rename to src/test/java/com/google/devtools/build/lib/skylark/StarlarkIntegrationTest.java
index 5aaeeb6..298b6d8 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/StarlarkIntegrationTest.java
@@ -73,7 +73,7 @@
 
 /** Integration tests for Starlark. */
 @RunWith(JUnit4.class)
-public class SkylarkIntegrationTest extends BuildViewTestCase {
+public class StarlarkIntegrationTest extends BuildViewTestCase {
   protected boolean keepGoing() {
     return false;
   }
@@ -2973,7 +2973,7 @@
 
   /** Starlark integration test that forces inlining. */
   @RunWith(JUnit4.class)
-  public static class SkylarkIntegrationTestsWithInlineCalls extends SkylarkIntegrationTest {
+  public static class StarlarkIntegrationTestsWithInlineCalls extends StarlarkIntegrationTest {
 
     @Before
     public final void initializeLookupFunctions() throws Exception {
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessorTest.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessorTest.java
index c2921cb..7778017 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessorTest.java
@@ -139,7 +139,7 @@
   @Test
   public void testSkylarkInfoBeforeParams() throws Exception {
     assertAbout(javaSource())
-        .that(getFile("SkylarkInfoBeforeParams.java"))
+        .that(getFile("StarlarkInfoBeforeParams.java"))
         .processedWith(new SkylarkCallableProcessor())
         .failsToCompile()
         .withErrorContaining(
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DoesntImplementSkylarkValue.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DoesntImplementSkylarkValue.java
index cb4be56..e9d84c1 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DoesntImplementSkylarkValue.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/DoesntImplementSkylarkValue.java
@@ -16,7 +16,7 @@
 
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 
-/** A SkylarkCallable-annotated method whose class doesn't implement StarlarkValue. */
+/** A StarlarkCallable-annotated method whose class doesn't implement StarlarkValue. */
 class DoesntImplementSkylarkValue {
   @SkylarkCallable(name = "x", documented = false)
   public Object x() {
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SkylarkInfoBeforeParams.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StarlarkInfoBeforeParams.java
similarity index 89%
rename from src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SkylarkInfoBeforeParams.java
rename to src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StarlarkInfoBeforeParams.java
index d07a7e7..5284a4b 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/SkylarkInfoBeforeParams.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/StarlarkInfoBeforeParams.java
@@ -20,9 +20,9 @@
 import com.google.devtools.build.lib.syntax.StarlarkValue;
 
 /**
- * Test case for a SkylarkCallable method which specifies StarlarkThread before other parameters.
+ * Test case for a StarlarkCallable method which specifies StarlarkThread before other parameters.
  */
-public class SkylarkInfoBeforeParams implements StarlarkValue {
+public class StarlarkInfoBeforeParams implements StarlarkValue {
 
   @SkylarkCallable(
       name = "skylark_info_wrong_order",
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/util/EvaluationTestCase.java b/src/test/java/com/google/devtools/build/lib/syntax/util/EvaluationTestCase.java
index 7c37350..0203bfe 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/util/EvaluationTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/util/EvaluationTestCase.java
@@ -92,7 +92,7 @@
    */
   public final void setSemantics(String... options) throws OptionsParsingException {
     StarlarkSemantics semantics =
-        Options.parse(StarlarkSemanticsOptions.class, options).getOptions().toSkylarkSemantics();
+        Options.parse(StarlarkSemanticsOptions.class, options).getOptions().toStarlarkSemantics();
 
     // Re-initialize the thread with the new semantics.
     this.thread = newStarlarkThread(semantics);
diff --git a/src/test/shell/bazel/BUILD b/src/test/shell/bazel/BUILD
index 76ae4d2..d61629f 100644
--- a/src/test/shell/bazel/BUILD
+++ b/src/test/shell/bazel/BUILD
@@ -124,9 +124,9 @@
 )
 
 sh_test(
-    name = "bazel_embedded_skylark_test",
+    name = "bazel_embedded_starlark_test",
     size = "medium",
-    srcs = ["bazel_embedded_skylark_test.sh"],
+    srcs = ["bazel_embedded_starlark_test.sh"],
     data = [":test-deps"],
     tags = [
         "no_windows",  # TODO(laszlocsomor): make this run on Windows
@@ -603,9 +603,9 @@
 )
 
 sh_test(
-    name = "external_skylark_execute_test",
+    name = "external_starlark_execute_test",
     size = "large",
-    srcs = ["external_skylark_execute_test.sh"],
+    srcs = ["external_starlark_execute_test.sh"],
     data = [":test-deps"],
     shard_count = 2,
     tags = ["no_windows"],
@@ -666,9 +666,9 @@
 )
 
 sh_test(
-    name = "skylark_git_repository_test",
+    name = "starlark_git_repository_test",
     size = "large",
-    srcs = ["skylark_git_repository_test.sh"],
+    srcs = ["starlark_git_repository_test.sh"],
     data = [
         ":test-deps",
         "//src/test/shell/bazel/testdata:git-repos",
@@ -695,16 +695,16 @@
 )
 
 sh_test(
-    name = "skylark_prefetching_test",
-    srcs = ["skylark_prefetching_test.sh"],
+    name = "starlark_prefetching_test",
+    srcs = ["starlark_prefetching_test.sh"],
     data = [":test-deps"],
     tags = ["no_windows"],
 )
 
 sh_test(
-    name = "external_skylark_load_test",
+    name = "external_starlark_load_test",
     size = "large",
-    srcs = ["external_skylark_load_test.sh"],
+    srcs = ["external_starlark_load_test.sh"],
     data = [":test-deps"],
     shard_count = 6,
     tags = ["no_windows"],
@@ -721,9 +721,9 @@
 )
 
 sh_test(
-    name = "skylark_repository_test",
+    name = "starlark_repository_test",
     size = "large",
-    srcs = ["skylark_repository_test.sh"],
+    srcs = ["starlark_repository_test.sh"],
     data = [
         ":test-deps",
         "@bazel_tools//tools/bash/runfiles",
@@ -735,9 +735,9 @@
 )
 
 sh_test(
-    name = "skylark_rule_test",
+    name = "starlark_rule_test",
     size = "large",
-    srcs = ["skylark_rule_test.sh"],
+    srcs = ["starlark_rule_test.sh"],
     data = [":test-deps"],
     tags = ["no_windows"],
 )
@@ -751,9 +751,9 @@
 )
 
 sh_test(
-    name = "tags_propagation_skylark_test",
+    name = "tags_propagation_starlark_test",
     size = "large",
-    srcs = ["tags_propagation_skylark_test.sh"],
+    srcs = ["tags_propagation_starlark_test.sh"],
     data = [":test-deps"],
     tags = ["no_windows"],
 )
@@ -799,9 +799,9 @@
 # To run this test, ensure that maven_dependency_plugin() and
 # android_repositories() in WORKSPACE are uncommented.
 sh_test(
-    name = "maven_skylark_test",
+    name = "maven_starlark_test",
     size = "medium",
-    srcs = ["maven_skylark_test.sh"],
+    srcs = ["maven_starlark_test.sh"],
     data = [
         ":test-deps",
         "//external:android_sdk_for_testing",
diff --git a/src/test/shell/bazel/bazel_embedded_skylark_test.sh b/src/test/shell/bazel/bazel_embedded_starlark_test.sh
similarity index 99%
rename from src/test/shell/bazel/bazel_embedded_skylark_test.sh
rename to src/test/shell/bazel/bazel_embedded_starlark_test.sh
index 606df5e..d9bc557 100755
--- a/src/test/shell/bazel/bazel_embedded_skylark_test.sh
+++ b/src/test/shell/bazel/bazel_embedded_starlark_test.sh
@@ -216,4 +216,4 @@
   bazel run :foo | grep -q dragons || fail "wrong output"
 }
 
-run_suite "embedded skylark"
+run_suite "embedded Starlark"
diff --git a/src/test/shell/bazel/external_skylark_execute_test.sh b/src/test/shell/bazel/external_starlark_execute_test.sh
similarity index 98%
rename from src/test/shell/bazel/external_skylark_execute_test.sh
rename to src/test/shell/bazel/external_starlark_execute_test.sh
index 1bf992e..314377b 100755
--- a/src/test/shell/bazel/external_skylark_execute_test.sh
+++ b/src/test/shell/bazel/external_starlark_execute_test.sh
@@ -102,4 +102,4 @@
     diff side1.txt side2.txt || fail "found delayed side effects"
 }
 
-run_suite "sklark execute tests"
+run_suite "Starlark execute tests"
diff --git a/src/test/shell/bazel/external_skylark_load_test.sh b/src/test/shell/bazel/external_starlark_load_test.sh
similarity index 100%
rename from src/test/shell/bazel/external_skylark_load_test.sh
rename to src/test/shell/bazel/external_starlark_load_test.sh
diff --git a/src/test/shell/bazel/maven_skylark_test.sh b/src/test/shell/bazel/maven_starlark_test.sh
similarity index 100%
rename from src/test/shell/bazel/maven_skylark_test.sh
rename to src/test/shell/bazel/maven_starlark_test.sh
diff --git a/src/test/shell/bazel/skylark_git_repository_test.sh b/src/test/shell/bazel/starlark_git_repository_test.sh
similarity index 99%
rename from src/test/shell/bazel/skylark_git_repository_test.sh
rename to src/test/shell/bazel/starlark_git_repository_test.sh
index 40012f2..a88648a 100755
--- a/src/test/shell/bazel/skylark_git_repository_test.sh
+++ b/src/test/shell/bazel/starlark_git_repository_test.sh
@@ -628,4 +628,4 @@
   expect_log "shallow_since not allowed if a tag is specified; --depth=1 will be used for tags"
 }
 
-run_suite "skylark git_repository tests"
+run_suite "Starlark git_repository tests"
diff --git a/src/test/shell/bazel/skylark_prefetching_test.sh b/src/test/shell/bazel/starlark_prefetching_test.sh
similarity index 99%
rename from src/test/shell/bazel/skylark_prefetching_test.sh
rename to src/test/shell/bazel/starlark_prefetching_test.sh
index d228715..f12c742 100755
--- a/src/test/shell/bazel/skylark_prefetching_test.sh
+++ b/src/test/shell/bazel/starlark_prefetching_test.sh
@@ -227,4 +227,4 @@
   bazel build @ext//:foo || fail "expected success"
 }
 
-run_suite "skylark repo prefetching tests"
+run_suite "Starlark repo prefetching tests"
diff --git a/src/test/shell/bazel/skylark_repository_test.sh b/src/test/shell/bazel/starlark_repository_test.sh
similarity index 100%
rename from src/test/shell/bazel/skylark_repository_test.sh
rename to src/test/shell/bazel/starlark_repository_test.sh
diff --git a/src/test/shell/bazel/skylark_rule_test.sh b/src/test/shell/bazel/starlark_rule_test.sh
similarity index 98%
rename from src/test/shell/bazel/skylark_rule_test.sh
rename to src/test/shell/bazel/starlark_rule_test.sh
index 73b0bb9..d8eb84b 100755
--- a/src/test/shell/bazel/skylark_rule_test.sh
+++ b/src/test/shell/bazel/starlark_rule_test.sh
@@ -89,4 +89,4 @@
   expect_log "error executing shell command"
 }
 
-run_suite "skylark rule definition tests"
+run_suite "Starlark rule definition tests"
diff --git a/src/test/shell/bazel/tags_propagation_skylark_test.sh b/src/test/shell/bazel/tags_propagation_starlark_test.sh
similarity index 100%
rename from src/test/shell/bazel/tags_propagation_skylark_test.sh
rename to src/test/shell/bazel/tags_propagation_starlark_test.sh
