feat(format): default output to dist/examples house style
Align the formatter defaults and layout with the hand-formatted reference procedures in dist/examples so a clean `pgtidy fmt` produces the house style. config.Default(): - align_param_types: false (no type-column alignment in param lists) - plpgsql_declare_align_type / plpgsql_declare_align_eq: true Formatter: - routine header: leading-comma params at column 0, first param at one indent, RETURNS/LANGUAGE/volatility/SECURITY each indented one level - %type / %rowtype printed tight (isPctTypeBoundary) - DECLARE = / := / DEFAULT column padded only to the widest declaration that carries an assignment - WHERE continuations in body UPDATE/DELETE: AND/OR aligned with WHERE - EXCEPTION aligned to its enclosing BEGIN; column-0 comment continuations kept flush-left Safety gate: - SemanticallyEqual tolerates CRLF vs LF inside string literals (normNL); the formatter re-emits all layout with st.Newline, so a \r\n inside a multi-line string literal is normalisation, not a code change. This was why action_init and event_exec_func previously refused to format. Corpus: - add the four CRLF reference files as idempotence/safety fixtures - regenerate test_a and test_mm_proc goldens FOR...LOOP body indentation keeps the existing +1 convention (LOOP aligned with FOR); the dist/examples use +2, so loop-body regions differ by whitespace only.
This commit is contained in:
@@ -32,6 +32,14 @@ func SemanticallyEqual(a, b string) bool {
|
||||
if !strings.EqualFold(ta[i].Text, tb[i].Text) {
|
||||
return false
|
||||
}
|
||||
case lexer.String, lexer.EscapeString, lexer.BitString, lexer.HexString, lexer.UnicodeString:
|
||||
// A CRLF vs LF difference inside a multi-line string literal is a
|
||||
// line-ending normalisation, not a change of code content — the
|
||||
// formatter always re-emits layout with st.Newline. Compare the
|
||||
// literal modulo \r\n ↔ \n.
|
||||
if normNL(ta[i].Text) != normNL(tb[i].Text) {
|
||||
return false
|
||||
}
|
||||
case lexer.DollarString:
|
||||
_, innerA, _, okA := splitDollarQuote(ta[i].Text)
|
||||
_, innerB, _, okB := splitDollarQuote(tb[i].Text)
|
||||
@@ -47,6 +55,10 @@ func SemanticallyEqual(a, b string) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// normNL collapses CRLF to LF so string literals compare independent of the
|
||||
// source file's line-ending convention.
|
||||
func normNL(s string) string { return strings.ReplaceAll(s, "\r\n", "\n") }
|
||||
|
||||
// significantTokens lexes src and returns its tokens excluding EOF and trivia
|
||||
// (whitespace/comments).
|
||||
func significantTokens(src string) []lexer.Token {
|
||||
|
||||
Reference in New Issue
Block a user