diff options
author | Francois-Rene Rideau <tunes@google.com> | 2015-03-17 16:01:47 +0000 |
---|---|---|
committer | Kristina Chodorow <kchodorow@google.com> | 2015-03-18 13:43:04 +0000 |
commit | e8cfead6d8152d21890937bbc92439388ff2d1ee (patch) | |
tree | 2bf68862030ea71e5f9fba1763f3c0bbecc302e2 /src | |
parent | 73a9849f38fbc3e66435bd14ac1cd50dcae7d6b6 (diff) |
Print singleton tuples with a comma
Like python, print singleton tuples with a terminating comma before the closing
parenthesis, so you can read them back as tuples.
Also, have toString() call the pretty-printer for Skylark lists and tuples.
--
MOS_MIGRATED_REVID=88831764
Diffstat (limited to 'src')
4 files changed, 25 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java index c03a9ff4a4..4c5c23d2d1 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java @@ -298,7 +298,7 @@ public abstract class EvalUtils { } else if (o instanceof Map<?, ?>) { Map<?, ?> dict = (Map<?, ?>) o; - printList(dict.entrySet(), "{", ", ", "}", buffer); + printList(dict.entrySet(), "{", ", ", "}", null, buffer); } else if (o instanceof Map.Entry<?, ?>) { Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o; @@ -309,7 +309,7 @@ public abstract class EvalUtils { } else if (o instanceof SkylarkNestedSet) { SkylarkNestedSet set = (SkylarkNestedSet) o; buffer.append("set("); - printList(set, "[", ", ", "]", buffer); + printList(set, "[", ", ", "]", null, buffer); Order order = set.getOrder(); if (order != Order.STABLE_ORDER) { buffer.append(", order = \"" + SkylarkNestedSet.orderString(order) + "\""); @@ -343,13 +343,21 @@ public abstract class EvalUtils { } private static void printList(Iterable<?> list, - String before, String separator, String after, Appendable buffer) throws IOException { - String sep = ""; + String before, String separator, String after, String singletonTerminator, Appendable buffer) + throws IOException { + boolean printSeparator = false; // don't print the separator before the first element + int len = 0; buffer.append(before); for (Object o : list) { - buffer.append(sep); + if (printSeparator) { + buffer.append(separator); + } prettyPrintValue(o, buffer); - sep = separator; + printSeparator = true; + len++; + } + if (singletonTerminator != null && len == 1) { + buffer.append(singletonTerminator); } buffer.append(after); } @@ -357,9 +365,9 @@ public abstract class EvalUtils { private static void printList(Iterable<?> list, boolean isTuple, Appendable buffer) throws IOException { if (isTuple) { - printList(list, "(", ", ", ")", buffer); + printList(list, "(", ", ", ")", ",", buffer); } else { - printList(list, "[", ", ", "]", buffer); + printList(list, "[", ", ", "]", null, buffer); } } 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 305ccbeacd..983ebb484f 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 @@ -80,7 +80,7 @@ public abstract class SkylarkList implements Iterable<Object> { @Override public String toString() { - return toList().toString(); + return EvalUtils.prettyPrintValue(this); } // TODO(bazel-team): we should be very careful using this method. Check and remove @@ -178,7 +178,7 @@ public abstract class SkylarkList implements Iterable<Object> { @Override public String toString() { - return list.toString(); + return EvalUtils.prettyPrintValue(this); } @Override 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 3fd5508922..b2bfaecf3c 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 @@ -427,7 +427,7 @@ public class EvaluationTest extends AbstractEvaluationTestCase { public void testListComprehensionOnDictionaryCompositeExpression() throws Exception { exec(parseFile("d = {1:'a',2:'b'}\n" + "l = [d[x] for x in d]"), env); - assertEquals("[a, b]", env.lookup("l").toString()); + assertEquals("[\"a\", \"b\"]", EvalUtils.prettyPrintValue(env.lookup("l"))); } @Test diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java index 633744cfea..65996d878b 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java @@ -816,6 +816,12 @@ public class SkylarkEvaluationTest extends EvaluationTest { assertEquals("a1", env.lookup("v")); } + @Test + public void testSingletonTuple() throws Exception { + exec(parseFileForSkylark("v = (1,)"), env); + assertEquals("(1,)", env.lookup("v").toString()); + } + @SuppressWarnings("unchecked") @Test public void testDirFindsClassObjectFields() throws Exception { |