feat(format): implement PL/pgSQL body formatting

* add formatBody and formatBodyInner functions for DECLARE section
* update needSpace to handle LBracket correctly
* enhance semanticallyEqual to compare dollar-quoted bodies
* add test data for broken layout scenarios
This commit is contained in:
2026-06-23 21:15:27 +02:00
parent 625ddc79a1
commit 6492ab35b7
7 changed files with 454 additions and 18 deletions
+6 -1
View File
@@ -104,7 +104,7 @@ func (p *printer) writeCreateFunction(cf *cst.CreateFunction) {
}
if cf.Body != nil {
p.nl()
p.b.WriteString(cf.Body.Tok.Text) // body emitted verbatim (formatted later)
p.b.WriteString(formatBody(cf.Body.Tok.Text, p.st))
}
for _, clause := range cf.Tail {
p.nl()
@@ -179,6 +179,11 @@ func needSpace(a, b lexer.Token) bool {
case lexer.Ident, lexer.QuotedIdent, lexer.RParen, lexer.RBracket, lexer.Param:
return false // function call / type modifier
}
case lexer.LBracket:
switch a.Kind {
case lexer.Ident, lexer.QuotedIdent, lexer.RParen, lexer.RBracket:
return false // array subscript / array type modifier
}
case lexer.Operator:
if tightOps[b.Text] {
return false