Add a pretty printer for Skylark ASTs
This can be used to canonically compare ASTs for equality, e.g. in tests.
RELNOTES: None
PiperOrigin-RevId: 160283160
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java
index 2c7a2c8..6312093 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/FuncallExpression.java
@@ -32,6 +32,7 @@
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.util.StringUtilities;
+import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@@ -249,6 +250,23 @@
return numPositionalArgs;
}
+ @Override
+ public void prettyPrint(Appendable buffer) throws IOException {
+ if (obj != null) {
+ obj.prettyPrint(buffer);
+ buffer.append('.');
+ }
+ func.prettyPrint(buffer);
+ buffer.append('(');
+ String sep = "";
+ for (Argument.Passed arg : args) {
+ buffer.append(sep);
+ arg.prettyPrint(buffer);
+ sep = ", ";
+ }
+ buffer.append(')');
+ }
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();