Implement list.clear()

#8728

Closes #8764.

PiperOrigin-RevId: 258347327
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java
index 1c3856b..1ae08f9 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java
@@ -490,6 +490,17 @@
     }
 
     @SkylarkCallable(
+        name = "clear",
+        doc = "Removes all the elements of the list.",
+        useLocation = true,
+        useEnvironment = true)
+    public Runtime.NoneType clearMethod(Location loc, Environment env) throws EvalException {
+      checkMutable(loc, env.mutability());
+      contents.clear();
+      return Runtime.NONE;
+    }
+
+    @SkylarkCallable(
       name = "insert",
       doc = "Inserts an item at a given position.",
       parameters = {
diff --git a/src/test/starlark/testdata/list_mutation.sky b/src/test/starlark/testdata/list_mutation.sky
index 7e5a3ee..3dbcf7e 100644
--- a/src/test/starlark/testdata/list_mutation.sky
+++ b/src/test/starlark/testdata/list_mutation.sky
@@ -93,3 +93,12 @@
 [1, 2].pop(3) ### index out of range (index is 3, but sequence has 2 elements)
 ---
 (1, 2).pop() ### type 'tuple' has no method pop()
+---
+
+# clear
+
+foo = [1, 2, 3, 4]
+foo.clear()
+assert_eq(foo, [])
+
+assert_eq(['a', 'b'].clear(), None)
\ No newline at end of file