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:
Daniel Chao
2025-10-24 16:48:21 -07:00
committed by GitHub
parent c7680aea1f
commit a8f76d6209
7 changed files with 275 additions and 53 deletions

View File

@@ -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());

View File

@@ -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,