Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public PythonWriter(PythonSettings settings, String fullPackageName, boolean add
trimBlankLines();
trimTrailingSpaces();
putFormatter('T', new PythonSymbolFormatter());
putFormatter('N', new PythonNodeFormatter());
putFormatter('N', new PythonNodeFormatter(this));
this.addCodegenWarningHeader = addCodegenWarningHeader;
}

Expand Down Expand Up @@ -325,6 +325,12 @@ private Boolean isOperationSymbol(Symbol typeSymbol) {
}

private final class PythonNodeFormatter implements BiFunction<Object, String, String> {
private final PythonWriter writer;

PythonNodeFormatter(PythonWriter writer) {
this.writer = writer;
}

@Override
public String apply(Object node, String indent) {
if (node instanceof Optional<?>) {
Expand All @@ -334,16 +340,18 @@ public String apply(Object node, String indent) {
throw new CodegenException(
"Invalid type provided to $D. Expected a Node, but found `" + node + "`");
}
return ((Node) node).accept(new PythonNodeFormatVisitor(indent));
return ((Node) node).accept(new PythonNodeFormatVisitor(indent, writer));
}
}

private final class PythonNodeFormatVisitor implements NodeVisitor<String> {

private String indent;
private final PythonWriter writer;

PythonNodeFormatVisitor(String indent) {
PythonNodeFormatVisitor(String indent, PythonWriter writer) {
this.indent = indent;
this.writer = writer;
}

@Override
Expand Down Expand Up @@ -379,10 +387,10 @@ public String stringNode(StringNode node) {
@Override
public String arrayNode(ArrayNode node) {
if (node.getElements().isEmpty()) {
return "[]";
return "()";
}

StringBuilder builder = new StringBuilder("[\n");
StringBuilder builder = new StringBuilder("(\n");
var oldIndent = indent;
indent += getIndentText();
for (Node element : node.getElements()) {
Expand All @@ -392,17 +400,18 @@ public String arrayNode(ArrayNode node) {
}
indent = oldIndent;
builder.append(indent);
builder.append(']');
builder.append(')');
return builder.toString();
}

@Override
public String objectNode(ObjectNode node) {
writer.addStdlibImport("types", "MappingProxyType");
if (node.getMembers().isEmpty()) {
return "{}";
return "MappingProxyType({})";
}

StringBuilder builder = new StringBuilder("{\n");
StringBuilder builder = new StringBuilder("MappingProxyType({\n");
var oldIndent = indent;
indent += getIndentText();
for (Map.Entry<StringNode, Node> member : node.getMembers().entrySet()) {
Expand All @@ -414,7 +423,7 @@ public String objectNode(ObjectNode node) {
}
indent = oldIndent;
builder.append(indent);
builder.append('}');
builder.append("})");
return builder.toString();
}
}
Expand Down
Loading