aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Francois-Rene Rideau <tunes@google.com>2015-03-17 16:01:47 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2015-03-18 13:43:04 +0000
commite8cfead6d8152d21890937bbc92439388ff2d1ee (patch)
tree2bf68862030ea71e5f9fba1763f3c0bbecc302e2 /src
parent73a9849f38fbc3e66435bd14ac1cd50dcae7d6b6 (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java4
-rw-r--r--src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java6
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 {