diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
index 7fa6f5b..60cb655 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
@@ -82,7 +82,6 @@
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.syntax.Location;
-import com.google.devtools.build.lib.syntax.NoneType;
 import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.build.lib.syntax.Sequence;
 import com.google.devtools.build.lib.syntax.Starlark;
@@ -873,72 +872,6 @@
     return pkg.getSourceRoot().get().relativize(pkg.getBuildFile().getPath()).getPathString();
   }
 
-  /**
-   * A Starlark built-in function to create and register a SpawnAction using a dictionary of
-   * parameters: action( inputs = [input1, input2, ...], outputs = [output1, output2, ...],
-   * executable = executable, arguments = [argument1, argument2, ...], mnemonic = 'Mnemonic',
-   * command = 'command', )
-   */
-  @Override
-  public NoneType action(
-      Sequence<?> outputs,
-      Object inputs,
-      Object executableUnchecked,
-      Object toolsUnchecked,
-      Object arguments,
-      Object mnemonicUnchecked,
-      Object commandUnchecked,
-      Object progressMessage,
-      Boolean useDefaultShellEnv,
-      Object envUnchecked,
-      Object executionRequirementsUnchecked,
-      Object inputManifestsUnchecked,
-      StarlarkThread thread)
-      throws EvalException {
-    checkDeprecated(
-        "ctx.actions.run or ctx.actions.run_shell", "ctx.action", thread.getSemantics());
-    checkMutable("action");
-    if ((commandUnchecked == Starlark.NONE) == (executableUnchecked == Starlark.NONE)) {
-      throw Starlark.errorf("You must specify either 'command' or 'executable' argument");
-    }
-    boolean hasCommand = commandUnchecked != Starlark.NONE;
-    if (!hasCommand) {
-      actions()
-          .run(
-              outputs,
-              inputs,
-              /*unusedInputsList=*/ Starlark.NONE,
-              executableUnchecked,
-              toolsUnchecked,
-              arguments,
-              mnemonicUnchecked,
-              progressMessage,
-              useDefaultShellEnv,
-              envUnchecked,
-              executionRequirementsUnchecked,
-              inputManifestsUnchecked,
-              /* execGroupUnchecked= */ Starlark.NONE);
-
-    } else {
-      actions()
-          .runShell(
-              outputs,
-              inputs,
-              toolsUnchecked,
-              arguments,
-              mnemonicUnchecked,
-              commandUnchecked,
-              progressMessage,
-              useDefaultShellEnv,
-              envUnchecked,
-              executionRequirementsUnchecked,
-              inputManifestsUnchecked,
-              /* execGroupUnchecked= */ Starlark.NONE,
-              thread);
-    }
-    return Starlark.NONE;
-  }
-
   @Override
   public String expandLocation(String input, Sequence<?> targets, StarlarkThread thread)
       throws EvalException {
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/StarlarkRuleContextApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/StarlarkRuleContextApi.java
index b7b398b..bd4b120 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/StarlarkRuleContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/StarlarkRuleContextApi.java
@@ -26,7 +26,6 @@
 import com.google.devtools.build.lib.syntax.ClassObject;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.NoneType;
 import com.google.devtools.build.lib.syntax.Sequence;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
@@ -526,164 +525,6 @@
   String getBuildFileRelativePath() throws EvalException;
 
   @StarlarkMethod(
-      name = "action",
-      doc =
-          "DEPRECATED. Use <a href=\"actions.html#run\">ctx.actions.run()</a> or"
-              + " <a href=\"actions.html#run_shell\">ctx.actions.run_shell()</a>. <br>"
-              + "Creates an action that runs an executable or a shell command."
-              + " You must specify either <code>command</code> or <code>executable</code>.\n"
-              + "Actions and genrules are very similar, but have different use cases. Actions are "
-              + "used inside rules, and genrules are used inside macros. Genrules also have make "
-              + "variable expansion.",
-      parameters = {
-        @Param(
-            name = "outputs",
-            type = Sequence.class,
-            generic1 = FileApi.class,
-            named = true,
-            positional = false,
-            doc = "List of the output files of the action."),
-        @Param(
-            name = "inputs",
-            allowedTypes = {
-              @ParamType(type = Sequence.class),
-              @ParamType(type = Depset.class),
-            },
-            generic1 = FileApi.class,
-            defaultValue = "[]",
-            named = true,
-            positional = false,
-            doc = "List of the input files of the action."),
-        @Param(
-            name = "executable",
-            type = Object.class,
-            allowedTypes = {
-              @ParamType(type = FileApi.class),
-              @ParamType(type = String.class),
-              @ParamType(type = NoneType.class),
-            },
-            noneable = true,
-            defaultValue = "None",
-            named = true,
-            positional = false,
-            doc = "The executable file to be called by the action."),
-        @Param(
-            name = "tools",
-            allowedTypes = {
-              @ParamType(type = Sequence.class),
-              @ParamType(type = Depset.class),
-            },
-            generic1 = FileApi.class,
-            defaultValue = "unbound",
-            named = true,
-            positional = false,
-            doc =
-                "List of the any tools needed by the action. Tools are inputs with additional "
-                    + "runfiles that are automatically made available to the action."),
-        @Param(
-            name = "arguments",
-            allowedTypes = {
-              @ParamType(type = Sequence.class),
-            },
-            defaultValue = "[]",
-            named = true,
-            positional = false,
-            doc =
-                "Command line arguments of the action. Must be a list of strings or actions.args() "
-                    + "objects."),
-        @Param(
-            name = "mnemonic",
-            type = String.class,
-            noneable = true,
-            defaultValue = "None",
-            named = true,
-            positional = false,
-            doc = "A one-word description of the action, e.g. CppCompile or GoLink."),
-        @Param(
-            name = "command",
-            type = Object.class,
-            allowedTypes = {
-              @ParamType(type = String.class),
-              @ParamType(type = Sequence.class, generic1 = String.class),
-              @ParamType(type = NoneType.class),
-            },
-            noneable = true,
-            defaultValue = "None",
-            named = true,
-            positional = false,
-            doc =
-                "Shell command to execute. It is usually preferable to "
-                    + "use <code>executable</code> instead. "
-                    + "Arguments are available with <code>$1</code>, <code>$2</code>, etc."),
-        @Param(
-            name = "progress_message",
-            type = String.class,
-            noneable = true,
-            defaultValue = "None",
-            named = true,
-            positional = false,
-            doc =
-                "Progress message to show to the user during the build, "
-                    + "e.g. \"Compiling foo.cc to create foo.o\"."),
-        @Param(
-            name = "use_default_shell_env",
-            type = Boolean.class,
-            defaultValue = "False",
-            named = true,
-            positional = false,
-            doc = "Whether the action should use the built in shell environment or not."),
-        @Param(
-            name = "env",
-            type = Dict.class,
-            noneable = true,
-            defaultValue = "None",
-            named = true,
-            positional = false,
-            doc = "Sets the dictionary of environment variables."),
-        @Param(
-            name = "execution_requirements",
-            type = Dict.class,
-            noneable = true,
-            defaultValue = "None",
-            named = true,
-            positional = false,
-            doc =
-                "Information for scheduling the action. See "
-                    + "<a href=\"$BE_ROOT/common-definitions.html#common.tags\">tags</a> "
-                    + "for useful keys."),
-        @Param(
-            // TODO(bazel-team): The name here isn't accurate anymore. This is technically
-            // experimental,
-            // so folks shouldn't be too attached, but consider renaming to be more accurate/opaque.
-            name = "input_manifests",
-            type = Sequence.class,
-            noneable = true,
-            defaultValue = "None",
-            named = true,
-            positional = false,
-            doc =
-                "(Experimental) sets the input runfiles metadata; "
-                    + "they are typically generated by resolve_command.")
-      },
-      allowReturnNones = true,
-      useStarlarkThread = true)
-  NoneType action(
-      Sequence<?> outputs,
-      Object inputs,
-      Object executableUnchecked,
-      Object toolsUnchecked,
-      Object arguments,
-      Object mnemonicUnchecked,
-      Object commandUnchecked,
-      Object progressMessage,
-      Boolean useDefaultShellEnv,
-      Object envUnchecked,
-      Object executionRequirementsUnchecked,
-      Object inputManifestsUnchecked,
-      StarlarkThread thread)
-      throws EvalException;
-
-  @StarlarkMethod(
       name = "expand_location",
       doc =
           "Expands all <code>$(location ...)</code> templates in the given string by replacing "
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/StarlarkRuleContextTest.java b/src/test/java/com/google/devtools/build/lib/skylark/StarlarkRuleContextTest.java
index 953edf1..c1d2bcc 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/StarlarkRuleContextTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/StarlarkRuleContextTest.java
@@ -146,8 +146,7 @@
         "cc_library(name = 'cc_with_features',",
         "           srcs = ['dummy.cc'],",
         "           features = ['f1', '-f3'],",
-        ")"
-    );
+        ")");
   }
 
   private void setRuleContext(StarlarkRuleContext ctx) throws Exception {
@@ -276,25 +275,27 @@
   @Test
   public void testMandatoryProvidersListWithNative() throws Exception {
     setStarlarkSemanticsOptions("--incompatible_disallow_struct_provider_syntax=false");
-    scratch.file("test/BUILD",
-            "load('//test:rules.bzl', 'my_rule', 'my_other_rule')",
-            "my_rule(name = 'mylib',",
-            "  srcs = ['a.py'])",
-            "testing_rule_for_mandatory_providers(name = 'skyrule1',",
-            "  deps = [':mylib'])",
-            "my_other_rule(name = 'my_other_lib',",
-            "  srcs = ['a.py'])",
-            "testing_rule_for_mandatory_providers(name = 'skyrule2',",
-            "  deps = [':my_other_lib'])");
-    scratch.file("test/rules.bzl",
-            "def my_rule_impl(ctx):",
-            "  return struct(a = [])",
-            "my_rule = rule(implementation = my_rule_impl, ",
-            "  attrs = { 'srcs' : attr.label_list(allow_files=True)})",
-            "def my_other_rule_impl(ctx):",
-            "  return struct(b = [])",
-            "my_other_rule = rule(implementation = my_other_rule_impl, ",
-            "  attrs = { 'srcs' : attr.label_list(allow_files=True)})");
+    scratch.file(
+        "test/BUILD",
+        "load('//test:rules.bzl', 'my_rule', 'my_other_rule')",
+        "my_rule(name = 'mylib',",
+        "  srcs = ['a.py'])",
+        "testing_rule_for_mandatory_providers(name = 'skyrule1',",
+        "  deps = [':mylib'])",
+        "my_other_rule(name = 'my_other_lib',",
+        "  srcs = ['a.py'])",
+        "testing_rule_for_mandatory_providers(name = 'skyrule2',",
+        "  deps = [':my_other_lib'])");
+    scratch.file(
+        "test/rules.bzl",
+        "def my_rule_impl(ctx):",
+        "  return struct(a = [])",
+        "my_rule = rule(implementation = my_rule_impl, ",
+        "  attrs = { 'srcs' : attr.label_list(allow_files=True)})",
+        "def my_other_rule_impl(ctx):",
+        "  return struct(b = [])",
+        "my_other_rule = rule(implementation = my_other_rule_impl, ",
+        "  attrs = { 'srcs' : attr.label_list(allow_files=True)})");
     reporter.removeHandler(failFastHandler);
     assertThat(getConfiguredTarget("//test:skyrule1")).isNotNull();
 
@@ -327,8 +328,7 @@
         "load('//test:macros.bzl', 'starlark_rule')",
         "starlark_rule(name = 'skyrule',",
         "  srcs = ['sub/my_sub_lib.h'])");
-    scratch.file("test/sub/BUILD",
-        "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])");
+    scratch.file("test/sub/BUILD", "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])");
     scratch.file(
         "test/macros.bzl",
         "def _impl(ctx):",
@@ -354,8 +354,7 @@
         "load('//test:macros.bzl', 'macro_starlark_rule')",
         "macro_starlark_rule(name = 'm_starlark',",
         "  srcs = ['sub/my_sub_lib.h'])");
-    scratch.file("test/sub/BUILD",
-        "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])");
+    scratch.file("test/sub/BUILD", "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])");
     scratch.file(
         "test/macros.bzl",
         "def _impl(ctx):",
@@ -403,12 +402,14 @@
     scratch.file("/r/WORKSPACE");
     scratch.file("/r/BUILD", "cc_library(name = 'cclib',", "  srcs = ['sub/my_sub_lib.h'])");
     scratch.file("/r/sub/BUILD", "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])");
-    scratch.overwriteFile("WORKSPACE",
+    scratch.overwriteFile(
+        "WORKSPACE",
         new ImmutableList.Builder<String>()
             .addAll(analysisMock.getWorkspaceContents(mockToolsConfig))
             .add("local_repository(name='r', path='/r')")
             .build());
-    invalidatePackages(/*alsoConfigs=*/false); // Repository shuffling messes with toolchain labels.
+    invalidatePackages(
+        /*alsoConfigs=*/ false); // Repository shuffling messes with toolchain labels.
     reporter.removeHandler(failFastHandler);
     getConfiguredTarget("@r//:cclib");
     assertContainsEvent(
@@ -432,8 +433,7 @@
         "test/BUILD",
         "load('//test:macros.bzl', 'macro_starlark_rule')",
         "macro_starlark_rule(name = 'm_starlark')");
-    scratch.file("test/sub/BUILD",
-        "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])");
+    scratch.file("test/sub/BUILD", "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])");
     scratch.file(
         "test/macros.bzl",
         "def _impl(ctx):",
@@ -455,13 +455,14 @@
 
   @Test
   public void testPackageBoundaryError_NativeMacro() throws Exception {
-    scratch.file("test/BUILD",
+    scratch.file(
+        "test/BUILD",
         "load('//test:macros.bzl', 'macro_native_rule')",
         "macro_native_rule(name = 'm_native',",
         "  srcs = ['sub/my_sub_lib.h'])");
-    scratch.file("test/sub/BUILD",
-        "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])");
-    scratch.file("test/macros.bzl",
+    scratch.file("test/sub/BUILD", "cc_library(name = 'my_sub_lib', srcs = ['my_sub_lib.h'])");
+    scratch.file(
+        "test/macros.bzl",
         "def macro_native_rule(name, deps=[], srcs=[]): ",
         "  native.cc_library(name = name, deps = deps, srcs = srcs)");
     reporter.removeHandler(failFastHandler);
@@ -949,7 +950,6 @@
     assertThat(result).isEqualTo("File");
   }
 
-
   @Test
   public void testDeriveTreeArtifactNextToSibling() throws Exception {
     setRuleContext(createRuleContext("//foo:foo"));
@@ -997,7 +997,6 @@
     assertThat(fragment.getPathString()).isEqualTo("foo/t.exe.params");
   }
 
-
   @Test
   public void testLabelKeyedStringDictConvertsToTargetToStringMap() throws Exception {
     scratch.file(
@@ -1185,8 +1184,9 @@
 
     invalidatePackages();
     getConfiguredTarget("//:r");
-    assertContainsEvent("in label_dict attribute of my_rule rule //:r: "
-        + "source file '//:myfile.cpp' is misplaced here (expected no files)");
+    assertContainsEvent(
+        "in label_dict attribute of my_rule rule //:r: "
+            + "source file '//:myfile.cpp' is misplaced here (expected no files)");
   }
 
   @Test
@@ -1282,8 +1282,9 @@
 
     invalidatePackages();
     getConfiguredTarget("//:r");
-    assertContainsEvent("in label_dict attribute of my_rule rule //:r: "
-        + "'//:dep' does not have mandatory providers: 'my_provider'");
+    assertContainsEvent(
+        "in label_dict attribute of my_rule rule //:r: "
+            + "'//:dep' does not have mandatory providers: 'my_provider'");
   }
 
   @Test
@@ -1308,8 +1309,8 @@
 
     invalidatePackages();
     getConfiguredTarget("//:r");
-    assertContainsEvent("in label_dict attribute of my_rule rule //:r: "
-        + "attribute must be non empty");
+    assertContainsEvent(
+        "in label_dict attribute of my_rule rule //:r: " + "attribute must be non empty");
   }
 
   @Test
@@ -1351,10 +1352,7 @@
         "  }",
         ")");
 
-    scratch.file(
-        "BUILD",
-        "load('//:my_rule.bzl', 'my_rule')",
-        "my_rule(name='r')");
+    scratch.file("BUILD", "load('//:my_rule.bzl', 'my_rule')", "my_rule(name='r')");
 
     invalidatePackages();
     getConfiguredTarget("//:r");
@@ -1375,10 +1373,7 @@
         "  }",
         ")");
 
-    scratch.file(
-        "BUILD",
-        "load('//:my_rule.bzl', 'my_rule')",
-        "my_rule(name='r')");
+    scratch.file("BUILD", "load('//:my_rule.bzl', 'my_rule')", "my_rule(name='r')");
 
     invalidatePackages();
     createRuleContext("//:r");
@@ -1418,7 +1413,8 @@
 
   @Test
   public void testRelativeLabelInExternalRepository() throws Exception {
-    scratch.file("external_rule.bzl",
+    scratch.file(
+        "external_rule.bzl",
         "def _impl(ctx):",
         "  return",
         "external_rule = rule(",
@@ -1428,21 +1424,21 @@
         "  }",
         ")");
 
-    scratch.file("BUILD",
-        "filegroup(name='dep')");
+    scratch.file("BUILD", "filegroup(name='dep')");
 
     scratch.file("/r/WORKSPACE");
-    scratch.file("/r/a/BUILD",
-        "load('@//:external_rule.bzl', 'external_rule')",
-        "external_rule(name='r')");
+    scratch.file(
+        "/r/a/BUILD", "load('@//:external_rule.bzl', 'external_rule')", "external_rule(name='r')");
 
-    scratch.overwriteFile("WORKSPACE",
+    scratch.overwriteFile(
+        "WORKSPACE",
         new ImmutableList.Builder<String>()
             .addAll(analysisMock.getWorkspaceContents(mockToolsConfig))
             .add("local_repository(name='r', path='/r')")
             .build());
 
-    invalidatePackages(/*alsoConfigs=*/false); // Repository shuffling messes with toolchain labels.
+    invalidatePackages(
+        /*alsoConfigs=*/ false); // Repository shuffling messes with toolchain labels.
     setRuleContext(createRuleContext("@r//a:r"));
     Label depLabel = (Label) ev.eval("ruleContext.attr.internal_dep.label");
     assertThat(depLabel).isEqualTo(Label.parseAbsolute("//:dep", ImmutableMap.of()));
@@ -1451,7 +1447,8 @@
   @Test
   public void testCallerRelativeLabelInExternalRepository() throws Exception {
     scratch.file("BUILD");
-    scratch.file("external_rule.bzl",
+    scratch.file(
+        "external_rule.bzl",
         "def _impl(ctx):",
         "  return",
         "external_rule = rule(",
@@ -1464,20 +1461,20 @@
         ")");
 
     scratch.file("/r/WORKSPACE");
-    scratch.file("/r/BUILD",
-        "filegroup(name='dep')");
+    scratch.file("/r/BUILD", "filegroup(name='dep')");
 
-    scratch.file("/r/a/BUILD",
-        "load('@//:external_rule.bzl', 'external_rule')",
-        "external_rule(name='r')");
+    scratch.file(
+        "/r/a/BUILD", "load('@//:external_rule.bzl', 'external_rule')", "external_rule(name='r')");
 
-    scratch.overwriteFile("WORKSPACE",
+    scratch.overwriteFile(
+        "WORKSPACE",
         new ImmutableList.Builder<String>()
             .addAll(analysisMock.getWorkspaceContents(mockToolsConfig))
             .add("local_repository(name='r', path='/r')")
             .build());
 
-    invalidatePackages(/*alsoConfigs=*/false); // Repository shuffling messes with toolchain labels.
+    invalidatePackages(
+        /*alsoConfigs=*/ false); // Repository shuffling messes with toolchain labels.
     setRuleContext(createRuleContext("@r//a:r"));
     Label depLabel = (Label) ev.eval("ruleContext.attr.internal_dep.label");
     assertThat(depLabel).isEqualTo(Label.parseAbsolute("@r//:dep", ImmutableMap.of()));
@@ -1496,17 +1493,14 @@
     scratch.file(
         "/r2/test.bzl",
         "def macro(name, path):",
-        "  native.local_repository(name = name, path = path)"
-    );
+        "  native.local_repository(name = name, path = path)");
     scratch.file("/r2/WORKSPACE");
     scratch.file(
-        "/r2/other_test.bzl",
-        "def other_macro(name, path):",
-        "  print(name + ': ' + path)"
-    );
+        "/r2/other_test.bzl", "def other_macro(name, path):", "  print(name + ': ' + path)");
     scratch.file("BUILD");
 
-    scratch.overwriteFile("WORKSPACE",
+    scratch.overwriteFile(
+        "WORKSPACE",
         new ImmutableList.Builder<String>()
             .addAll(analysisMock.getWorkspaceContents(mockToolsConfig))
             .add("local_repository(name='r2', path='/r2')")
@@ -1518,7 +1512,8 @@
             .add("macro(NEXT_NAME, '/r2')") // and we can still use macro outside of its chunk.
             .build());
 
-    invalidatePackages(/*alsoConfigs=*/false); // Repository shuffling messes with toolchain labels.
+    invalidatePackages(
+        /*alsoConfigs=*/ false); // Repository shuffling messes with toolchain labels.
     assertThat(getConfiguredTarget("@r1//:test")).isNotNull();
   }
 
@@ -1532,14 +1527,16 @@
     scratch.file("/baz/WORKSPACE");
     scratch.file("/baz/baz.txt");
     scratch.file("/baz/BUILD", "filegroup(name = 'baz', srcs = ['baz.txt'])");
-    scratch.overwriteFile("WORKSPACE",
+    scratch.overwriteFile(
+        "WORKSPACE",
         new ImmutableList.Builder<String>()
             .addAll(analysisMock.getWorkspaceContents(mockToolsConfig))
             .add("local_repository(name = 'foo', path = '/bar')")
             .add("local_repository(name = 'foo', path = '/baz')")
             .build());
 
-    invalidatePackages(/*alsoConfigs=*/false); // Repository shuffling messes with toolchain labels.
+    invalidatePackages(
+        /*alsoConfigs=*/ false); // Repository shuffling messes with toolchain labels.
     assertThat(
             (List)
                 getConfiguredTargetAndData("@foo//:baz")
@@ -1552,7 +1549,8 @@
     scratch.overwriteFile("BUILD");
     scratch.overwriteFile("bar.bzl", "dummy = 1");
 
-    scratch.overwriteFile("WORKSPACE",
+    scratch.overwriteFile(
+        "WORKSPACE",
         new ImmutableList.Builder<String>()
             .addAll(analysisMock.getWorkspaceContents(mockToolsConfig))
             .add("local_repository(name = 'foo', path = '/bar')")
@@ -1560,8 +1558,7 @@
             .add("local_repository(name = 'foo', path = '/baz')")
             .build());
 
-          invalidatePackages(
-              /*alsoConfigs=*/ false); // Repository shuffling messes with toolchains.
+    invalidatePackages(/*alsoConfigs=*/ false); // Repository shuffling messes with toolchains.
     assertThrows(Exception.class, () -> createRuleContext("@foo//:baz"));
     assertContainsEvent(
         "Cannot redefine repository after any load statement in the WORKSPACE file "
@@ -1803,8 +1800,7 @@
     scratch.file("/bar/bar.txt");
     scratch.file("/bar/BUILD", "exports_files(['bar.txt'])");
     FileSystemUtils.appendIsoLatin1(
-        scratch.resolve("WORKSPACE"),
-        "local_repository(name = 'foo', path = '/bar')");
+        scratch.resolve("WORKSPACE"), "local_repository(name = 'foo', path = '/bar')");
     scratch.file(
         "test/BUILD",
         "genrule(",
@@ -1860,33 +1856,33 @@
   }
 
   private final String testingRuleDefinition =
-    linesAsString(
-      "def _testing_impl(ctx):",
-      "  pass",
-      "testing_rule = rule(",
-      "  implementation = _testing_impl,",
-      "  attrs = {'dep': attr.label()},",
-      ")");
+      linesAsString(
+          "def _testing_impl(ctx):",
+          "  pass",
+          "testing_rule = rule(",
+          "  implementation = _testing_impl,",
+          "  attrs = {'dep': attr.label()},",
+          ")");
 
   private final String simpleBuildDefinition =
-    linesAsString(
-      "load(':rules.bzl', 'undertest_rule', 'testing_rule')",
-      "undertest_rule(",
-      "    name = 'undertest',",
-      ")",
-      "testing_rule(",
-      "    name = 'testing',",
-      "    dep = ':undertest',",
-      ")");
+      linesAsString(
+          "load(':rules.bzl', 'undertest_rule', 'testing_rule')",
+          "undertest_rule(",
+          "    name = 'undertest',",
+          ")",
+          "testing_rule(",
+          "    name = 'testing',",
+          "    dep = ':undertest',",
+          ")");
 
   @Test
   public void testDependencyActionsProvider() throws Exception {
-    scratch.file("test/rules.bzl",
+    scratch.file(
+        "test/rules.bzl",
         getSimpleUnderTestDefinition(
             "ctx.actions.run_shell(outputs=[out], command='echo foo123 > ' + out.path)"),
         testingRuleDefinition);
-    scratch.file("test/BUILD",
-        simpleBuildDefinition);
+    scratch.file("test/BUILD", simpleBuildDefinition);
     StarlarkRuleContext ruleContext = createRuleContext("//test:testing");
     setRuleContext(ruleContext);
 
@@ -1905,12 +1901,12 @@
   @Test
   public void testNoAccessToDependencyActionsWithoutStarlarkTest() throws Exception {
     reporter.removeHandler(failFastHandler);
-    scratch.file("test/rules.bzl",
+    scratch.file(
+        "test/rules.bzl",
         getSimpleNontestableUnderTestDefinition(
             "ctx.actions.run_shell(outputs=[out], command='echo foo123 > ' + out.path)"),
         testingRuleDefinition);
-    scratch.file("test/BUILD",
-        simpleBuildDefinition);
+    scratch.file("test/BUILD", simpleBuildDefinition);
     StarlarkRuleContext ruleContext = createRuleContext("//test:testing");
     setRuleContext(ruleContext);
 
@@ -1943,8 +1939,7 @@
         "  _skylark_testable = True,",
         ")",
         testingRuleDefinition);
-    scratch.file("test/BUILD",
-        simpleBuildDefinition);
+    scratch.file("test/BUILD", simpleBuildDefinition);
     StarlarkRuleContext ruleContext = createRuleContext("//test:testing");
     setRuleContext(ruleContext);
     ev.update("file1", ev.eval("ruleContext.attr.dep.out1"));
@@ -1994,8 +1989,7 @@
         "  _skylark_testable = True,",
         ")",
         testingRuleDefinition);
-    scratch.file("test/BUILD",
-        simpleBuildDefinition);
+    scratch.file("test/BUILD", simpleBuildDefinition);
     StarlarkRuleContext ruleContext = createRuleContext("//test:testing");
     setRuleContext(ruleContext);
 
@@ -2014,11 +2008,12 @@
 
   @Test
   public void testNoAccessToCreatedActionsWithoutStarlarkTest() throws Exception {
-    scratch.file("test/rules.bzl",
+    scratch.file(
+        "test/rules.bzl",
         getSimpleNontestableUnderTestDefinition(
-            "ctx.actions.run_shell(outputs=[out], command='echo foo123 > ' + out.path)")
-        );
-    scratch.file("test/BUILD",
+            "ctx.actions.run_shell(outputs=[out], command='echo foo123 > ' + out.path)"));
+    scratch.file(
+        "test/BUILD",
         "load(':rules.bzl', 'undertest_rule')",
         "undertest_rule(",
         "    name = 'undertest',",
@@ -2032,12 +2027,12 @@
 
   @Test
   public void testSpawnActionInterface() throws Exception {
-    scratch.file("test/rules.bzl",
+    scratch.file(
+        "test/rules.bzl",
         getSimpleUnderTestDefinition(
             "ctx.actions.run_shell(outputs=[out], command='echo foo123 > ' + out.path)"),
         testingRuleDefinition);
-    scratch.file("test/BUILD",
-        simpleBuildDefinition);
+    scratch.file("test/BUILD", simpleBuildDefinition);
     StarlarkRuleContext ruleContext = createRuleContext("//test:testing");
     setRuleContext(ruleContext);
     ev.update("file", ev.eval("ruleContext.attr.dep.files.to_list()[0]"));
@@ -2148,12 +2143,11 @@
 
   @Test
   public void testFileWriteActionInterface() throws Exception {
-    scratch.file("test/rules.bzl",
-        getSimpleUnderTestDefinition(
-            "ctx.actions.write(output=out, content='foo123')"),
+    scratch.file(
+        "test/rules.bzl",
+        getSimpleUnderTestDefinition("ctx.actions.write(output=out, content='foo123')"),
         testingRuleDefinition);
-    scratch.file("test/BUILD",
-        simpleBuildDefinition);
+    scratch.file("test/BUILD", simpleBuildDefinition);
     StarlarkRuleContext ruleContext = createRuleContext("//test:testing");
     setRuleContext(ruleContext);
     ev.update("file", ev.eval("ruleContext.attr.dep.files.to_list()[0]"));
@@ -2262,10 +2256,9 @@
         "  _skylark_testable = True,",
         ")",
         testingRuleDefinition);
-    scratch.file("test/template.txt",
-        "aaaaa",
-        "bcdef");
-    scratch.file("test/BUILD",
+    scratch.file("test/template.txt", "aaaaa", "bcdef");
+    scratch.file(
+        "test/BUILD",
         "load(':rules.bzl', 'undertest_rule', 'testing_rule')",
         "undertest_rule(",
         "    name = 'undertest',",
@@ -2292,7 +2285,8 @@
   }
 
   private void setUpCoverageInstrumentedTest() throws Exception {
-    scratch.file("test/BUILD",
+    scratch.file(
+        "test/BUILD",
         "cc_library(",
         "  name = 'foo',",
         "  srcs = ['foo.cc'],",
@@ -2397,7 +2391,6 @@
           "actions.run_shell(command = 'foo', outputs = [file])",
           "actions.write(file, 'foo')",
           "check_placeholders('foo', [])",
-          "action(command = 'foo', outputs = [file])",
           "runfiles()",
           "resolve_command(command = 'foo')",
           "resolve_tools()");
@@ -2405,7 +2398,8 @@
   @Test
   public void testFrozenRuleContextHasInaccessibleAttributes() throws Exception {
     setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
-    scratch.file("test/BUILD",
+    scratch.file(
+        "test/BUILD",
         "load('//test:rules.bzl', 'main_rule', 'dep_rule')",
         "dep_rule(name = 'dep')",
         "main_rule(name = 'main', deps = [':dep'])");
@@ -2450,20 +2444,18 @@
     setStarlarkSemanticsOptions("--incompatible_new_actions_api=false");
     List<String> attributes = new ArrayList<>();
     attributes.addAll(ctxAttributes);
-    attributes.addAll(ImmutableList.of(
-        "rule.attr",
-        "rule.executable",
-        "rule.file",
-        "rule.files",
-        "rule.kind"));
-    scratch.file("test/BUILD",
+    attributes.addAll(
+        ImmutableList.of("rule.attr", "rule.executable", "rule.file", "rule.files", "rule.kind"));
+    scratch.file(
+        "test/BUILD",
         "load('//test:rules.bzl', 'my_rule')",
         "my_rule(name = 'dep')",
         "my_rule(name = 'mid', deps = [':dep'])",
         "my_rule(name = 'main', deps = [':mid'])");
     scratch.file("test/rules.bzl");
     for (String attribute : attributes) {
-       scratch.overwriteFile("test/rules.bzl",
+      scratch.overwriteFile(
+          "test/rules.bzl",
           "def _rule_impl(ctx):",
           "  pass",
           "def _aspect_impl(target, ctx):",
@@ -2496,20 +2488,16 @@
   }
 
   private static final List<String> deprecatedActionsApi =
-      ImmutableList.of(
-          "new_file('foo.txt')",
-          "new_file(file, 'foo.txt')",
-          "action(command = 'foo', outputs = [file])");
+      ImmutableList.of("new_file('foo.txt')", "new_file(file, 'foo.txt')");
 
   @Test
   public void testIncompatibleNewActionsApi() throws Exception {
-    scratch.file("test/BUILD",
-        "load('//test:rules.bzl', 'main_rule')",
-        "main_rule(name = 'main')");
+    scratch.file("test/BUILD", "load('//test:rules.bzl', 'main_rule')", "main_rule(name = 'main')");
     scratch.file("test/rules.bzl");
 
     for (String actionApi : deprecatedActionsApi) {
-      scratch.overwriteFile("test/rules.bzl",
+      scratch.overwriteFile(
+          "test/rules.bzl",
           "def _main_impl(ctx):",
           "  file = ctx.outputs.file",
           "  foo = ctx." + actionApi,
@@ -2519,8 +2507,7 @@
           "    'deps': attr.label_list()",
           "  },",
           "  outputs = {'file': 'output.txt'},",
-          ")"
-      );
+          ")");
       setStarlarkSemanticsOptions("--incompatible_new_actions_api=true");
       invalidatePackages();
       AssertionError e =
@@ -2537,12 +2524,14 @@
 
   @Test
   public void testMapAttributeOrdering() throws Exception {
-    scratch.file("a/a.bzl",
+    scratch.file(
+        "a/a.bzl",
         "key_provider = provider(fields=['keys'])",
         "def _impl(ctx):",
         "  return [key_provider(keys=ctx.attr.value.keys())]",
         "a = rule(implementation=_impl, attrs={'value': attr.string_dict()})");
-    scratch.file("a/BUILD",
+    scratch.file(
+        "a/BUILD",
         "load(':a.bzl', 'a')",
         "a(name='a', value={'c': 'c', 'b': 'b', 'a': 'a', 'f': 'f', 'e': 'e', 'd': 'd'})");
 
@@ -2617,8 +2606,9 @@
 
     reporter.removeHandler(failFastHandler);
     getConfiguredTarget("//test:my_non_build_setting");
-    assertContainsEvent("attempting to access 'build_setting_value' of non-build setting "
-        + "//test:my_non_build_setting");
+    assertContainsEvent(
+        "attempting to access 'build_setting_value' of non-build setting "
+            + "//test:my_non_build_setting");
   }
 
   private void createToolchains() throws Exception {
