mirror of
https://github.com/apple/pkl.git
synced 2026-03-27 19:41:18 +01:00
Adjust formatting of qualified access chains (#1252)
This adjusts formatting of qualified access chains so that leading dot calls are kept in the same line if possible.
This commit is contained in:
@@ -679,6 +679,10 @@ public class GenericParser {
|
||||
ff(children);
|
||||
expect(Token.RBRACK, children, "unexpectedToken", "]");
|
||||
}
|
||||
case DOT, QDOT -> {
|
||||
nodeType = NodeType.QUALIFIED_ACCESS_EXPR;
|
||||
children.add(parseUnqualifiedAccessExpr());
|
||||
}
|
||||
case NON_NULL -> nodeType = NodeType.NON_NULL_EXPR;
|
||||
default -> children.add(parseExpr(expectation, nextMinPrec));
|
||||
}
|
||||
@@ -719,6 +723,16 @@ public class GenericParser {
|
||||
};
|
||||
}
|
||||
|
||||
private Node parseUnqualifiedAccessExpr() {
|
||||
var children = new ArrayList<Node>();
|
||||
children.add(parseIdentifier());
|
||||
if (lookahead() == Token.LPAREN && noSemicolonInbetween() && _lookahead.newLinesBetween == 0) {
|
||||
ff(children);
|
||||
children.add(parseArgumentList());
|
||||
}
|
||||
return new Node(NodeType.UNQUALIFIED_ACCESS_EXPR, children);
|
||||
}
|
||||
|
||||
private Node parseExprAtom(@Nullable String expectation) {
|
||||
var expr =
|
||||
switch (lookahead) {
|
||||
@@ -884,16 +898,7 @@ public class GenericParser {
|
||||
case FLOAT -> new Node(NodeType.FLOAT_LITERAL_EXPR, next().span);
|
||||
case STRING_START -> parseSingleLineStringLiteralExpr();
|
||||
case STRING_MULTI_START -> parseMultiLineStringLiteralExpr();
|
||||
case IDENTIFIER -> {
|
||||
var children = new ArrayList<Node>();
|
||||
children.add(parseIdentifier());
|
||||
if (lookahead == Token.LPAREN
|
||||
&& noSemicolonInbetween()
|
||||
&& _lookahead.newLinesBetween == 0) {
|
||||
children.add(parseArgumentList());
|
||||
}
|
||||
yield new Node(NodeType.UNQUALIFIED_ACCESS_EXPR, children);
|
||||
}
|
||||
case IDENTIFIER -> parseUnqualifiedAccessExpr();
|
||||
case EOF ->
|
||||
throw parserError(
|
||||
ErrorMessages.create("unexpectedEndOfFile"), prev().span.stopSpan());
|
||||
|
||||
@@ -110,6 +110,7 @@ public enum NodeType {
|
||||
SUPER_SUBSCRIPT_EXPR(NodeKind.EXPR),
|
||||
SUPER_ACCESS_EXPR(NodeKind.EXPR),
|
||||
SUBSCRIPT_EXPR(NodeKind.EXPR),
|
||||
QUALIFIED_ACCESS_EXPR(NodeKind.EXPR),
|
||||
IF_EXPR(NodeKind.EXPR),
|
||||
IF_HEADER,
|
||||
IF_CONDITION,
|
||||
|
||||
@@ -34,10 +34,6 @@ class GenericSexpRenderer(code: String) {
|
||||
renderUnionType(node)
|
||||
return
|
||||
}
|
||||
if (node.type == NodeType.BINARY_OP_EXPR && binopName(node).endsWith("ualifiedAccessExpr")) {
|
||||
renderQualifiedAccess(node)
|
||||
return
|
||||
}
|
||||
doRender(name(node), collectChildren(node))
|
||||
}
|
||||
|
||||
@@ -143,6 +139,10 @@ class GenericSexpRenderer(code: String) {
|
||||
NodeType.AMENDS_CLAUSE -> "extendsOrAmendsClause"
|
||||
NodeType.TYPEALIAS -> "typeAlias"
|
||||
NodeType.STRING_ESCAPE -> "stringChars"
|
||||
NodeType.QUALIFIED_ACCESS_EXPR -> {
|
||||
val op = node.findChildByType(NodeType.OPERATOR)!!
|
||||
if (op.text(source) == ".") "qualifiedAccessExpr" else "nullableQualifiedAccessExpr"
|
||||
}
|
||||
NodeType.READ_EXPR -> {
|
||||
val terminal = node.children.find { it.type == NodeType.TERMINAL }!!.text(source)
|
||||
when (terminal) {
|
||||
|
||||
@@ -28,14 +28,14 @@ class SexpRenderer {
|
||||
private var tab = ""
|
||||
private var buf = StringBuilder()
|
||||
|
||||
fun render(mod: org.pkl.parser.syntax.Module): String {
|
||||
fun render(mod: Module): String {
|
||||
renderModule(mod)
|
||||
val res = buf.toString()
|
||||
reset()
|
||||
return res
|
||||
}
|
||||
|
||||
fun renderModule(mod: org.pkl.parser.syntax.Module) {
|
||||
fun renderModule(mod: Module) {
|
||||
buf.append(tab)
|
||||
buf.append("(module")
|
||||
val oldTab = increaseTab()
|
||||
@@ -515,13 +515,11 @@ class SexpRenderer {
|
||||
tab = oldTab
|
||||
}
|
||||
|
||||
fun renderQualifiedAccessExpr(expr: QualifiedAccessExpr) {
|
||||
fun renderUnqualifiedAccessExprOfQualified(expr: QualifiedAccessExpr) {
|
||||
buf.append(tab)
|
||||
buf.append(if (expr.isNullable) "(nullableQualifiedAccessExpr" else "(qualifiedAccessExpr")
|
||||
buf.append("(unqualifiedAccessExpr")
|
||||
val oldTab = increaseTab()
|
||||
buf.append('\n')
|
||||
renderExpr(expr.expr)
|
||||
buf.append('\n')
|
||||
buf.append(tab)
|
||||
buf.append("(identifier)")
|
||||
if (expr.argumentList !== null) {
|
||||
@@ -532,6 +530,18 @@ class SexpRenderer {
|
||||
tab = oldTab
|
||||
}
|
||||
|
||||
fun renderQualifiedAccessExpr(expr: QualifiedAccessExpr) {
|
||||
buf.append(tab)
|
||||
buf.append(if (expr.isNullable) "(nullableQualifiedAccessExpr" else "(qualifiedAccessExpr")
|
||||
val oldTab = increaseTab()
|
||||
buf.append('\n')
|
||||
renderExpr(expr.expr)
|
||||
buf.append('\n')
|
||||
renderUnqualifiedAccessExprOfQualified(expr)
|
||||
buf.append(')')
|
||||
tab = oldTab
|
||||
}
|
||||
|
||||
fun renderSuperAccessExpr(expr: SuperAccessExpr) {
|
||||
buf.append(tab)
|
||||
buf.append("(superAccessExpr")
|
||||
|
||||
Reference in New Issue
Block a user