diff --git a/pkl-formatter/src/main/kotlin/org/pkl/formatter/Builder.kt b/pkl-formatter/src/main/kotlin/org/pkl/formatter/Builder.kt index 40aeba12..37d8e17e 100644 --- a/pkl-formatter/src/main/kotlin/org/pkl/formatter/Builder.kt +++ b/pkl-formatter/src/main/kotlin/org/pkl/formatter/Builder.kt @@ -972,18 +972,22 @@ internal class Builder(sourceText: String, private val grammarVersion: GrammarVe private fun formatLetExpr(node: Node): FormatNode { val separator = if (node.isMultiline()) forceLine() else spaceOrLine() + val endsWithLet = node.children.last().type == NodeType.LET_EXPR val nodes = formatGenericWithGen( node.children, { _, next -> if (next.type == NodeType.LET_PARAMETER_DEFINITION) Space else separator }, - ) { node, next -> - if (next == null) { - if (node.type == NodeType.LET_EXPR) { + ) { node, _ -> + when { + node.type == NodeType.LET_EXPR -> { // unpack the lets val group = formatLetExpr(node) as Group Nodes(group.nodes) - } else indent(format(node)) - } else format(node) + } + endsWithLet -> format(node) + node.type.isExpression || node.type.isAffix -> indent(format(node)) + else -> format(node) + } } return Group(newId(), nodes) } diff --git a/pkl-formatter/src/test/files/FormatterSnippetTests/input/comment-interleaved.pkl b/pkl-formatter/src/test/files/FormatterSnippetTests/input/comment-interleaved.pkl index 95fad6ce..3474ff3d 100644 --- a/pkl-formatter/src/test/files/FormatterSnippetTests/input/comment-interleaved.pkl +++ b/pkl-formatter/src/test/files/FormatterSnippetTests/input/comment-interleaved.pkl @@ -29,3 +29,46 @@ bar2 = ( // some comment foo, bar // another comment ) -> foo + bar + +bar3 = + let (bar = new Dynamic {}) + // some coment + (bar) { + qux = 4 + } + +bar4 = + // some coment + let (bar = new Dynamic {}) + (bar) { + qux = 4 + } + +bar5 = + let (bar = 4) + // some coment + let (qux = 5) + bar + qux + +bar6 = + let (bar = 4) + /* some comment */ bar + 5 + +bar7 = + let (bar = 4) /* some comment */ + bar + 5 + +bar8 = + let (bar = 4) + // some comment + // another comment + let (foo = 5) + // some comment + // another comment + bar + foo + +bar9 = + let (bar = 4) + // some comment + // another comment + bar diff --git a/pkl-formatter/src/test/files/FormatterSnippetTests/output/comment-interleaved.pkl b/pkl-formatter/src/test/files/FormatterSnippetTests/output/comment-interleaved.pkl index 876859ff..a4471b23 100644 --- a/pkl-formatter/src/test/files/FormatterSnippetTests/output/comment-interleaved.pkl +++ b/pkl-formatter/src/test/files/FormatterSnippetTests/output/comment-interleaved.pkl @@ -32,3 +32,46 @@ bar2 = ( // some comment bar // another comment ) -> foo + bar + +bar3 = + let (bar = new Dynamic {}) + // some coment + (bar) { + qux = 4 + } + +bar4 = + // some coment + let (bar = new Dynamic {}) + (bar) { + qux = 4 + } + +bar5 = + let (bar = 4) + // some coment + let (qux = 5) + bar + qux + +bar6 = + let (bar = 4) + /* some comment */ bar + 5 + +bar7 = + let (bar = 4) /* some comment */ + bar + 5 + +bar8 = + let (bar = 4) + // some comment + // another comment + let (foo = 5) + // some comment + // another comment + bar + foo + +bar9 = + let (bar = 4) + // some comment + // another comment + bar