Require parens around tuple with trailing comma.

RELNOTES[INC]:
  Tuples that end with a trailing comma must now be inside parens,
  e.g. (1,) instead of 1,

--
PiperOrigin-RevId: 144690953
MOS_MIGRATED_REVID=144690953
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
index 4bb99d6..4a80886 100644
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
@@ -1577,7 +1577,7 @@
         "    name = name,",
         "    srcs = ['simple/Simple.java'],",
         "    manifest = 'AndroidManifest.xml',",
-        "),");
+        ")");
     scratch.file(
         "java/com/google/example/BUILD",
         "load('//java/com/google/example:build_defs.bzl', 'my_macro')",
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
index 78d28e1..0615045 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
@@ -726,7 +726,7 @@
     }
 
     scratch.overwriteFile("foo/BUILD",
-        "exports_files(glob(['*.txt'])),",
+        "exports_files(glob(['*.txt']))",
         "#some-irrelevant-comment");
 
     getSkyframeExecutor().invalidateFilesUnderPathForTesting(reporter,
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/BuildFileASTTest.java b/src/test/java/com/google/devtools/build/lib/syntax/BuildFileASTTest.java
index 0a1b4fe..a710481 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/BuildFileASTTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/BuildFileASTTest.java
@@ -85,11 +85,7 @@
 
   @Test
   public void testParsesFineWithNewlines() throws Exception {
-    BuildFileAST buildFileAST = parseBuildFile(
-        "foo()",
-        "bar(),",
-        "something = baz()",
-        "bar()");
+    BuildFileAST buildFileAST = parseBuildFile("foo()", "bar()", "something = baz()", "bar()");
     assertThat(buildFileAST.getStatements()).hasSize(4);
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
index debcaf0..8e41974 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
@@ -451,7 +451,7 @@
 
   @Test
   public void testSingleTuple() throws Exception {
-    newTest().setUp("a, = [1]").testLookup("a", 1);
+    newTest().setUp("(a,) = [1]").testLookup("a", 1);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
index c527fd2..43f6bcf 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
@@ -555,8 +555,19 @@
   }
 
   @Test
-  public void testTupleWithoutParensWithTrailingComma() throws Exception {
-    ListLiteral tuple = (ListLiteral) parseExpression("0, 1, 2, 3,");
+  public void testTupleWithTrailingComma() throws Exception {
+    setFailFast(false);
+
+    // Unlike Python, we require parens here.
+    parseExpression("0, 1, 2, 3,");
+    assertContainsError("Trailing comma");
+    clearEvents();
+
+    parseExpression("1 + 2,");
+    assertContainsError("Trailing comma");
+    clearEvents();
+
+    ListLiteral tuple = (ListLiteral) parseExpression("(0, 1, 2, 3,)");
     assertTrue(tuple.isTuple());
     assertThat(tuple.getElements()).hasSize(4);
     assertTrue(tuple.isTuple());