feat(format): case_collapse uses line_width via Doc-IR
This commit is contained in:
@@ -65,5 +65,5 @@ binary_op_align: false # Align =, <>, || etc. vertically in WHERE/exp
|
||||
space_after_comma_in_calls: false # Space after , in function calls: func(a, b)
|
||||
case_when_wrap: false # Each WHEN … THEN on its own line
|
||||
case_end: new_line # END placement: same_line | new_line
|
||||
case_collapse: false # Collapse short CASE expressions to one line
|
||||
case_collapse: false # Collapse a CASE to one line when it fits line_width
|
||||
record_space_before_paren: false # Space before ( in ROW(…) / record constructors
|
||||
|
||||
+4
-5
@@ -167,7 +167,7 @@ Legend: ✅ done · 🚧 in progress · ⬜ not started
|
||||
function call at the token level — formatted without space (known limitation).
|
||||
- Note: SQL keywords inside PL/pgSQL function bodies remain lowercase (matching
|
||||
the corpus golden files); casing is applied only to top-level DML.
|
||||
- ✅ Doc-IR core (`pkg/format/doc.go`: Text/Line/SoftLine/Group/Indent/IfBreak + `Render`) and `line_width` (default 120, 0 = unlimited). First consumer: `where_wrap: when_long` (`dmlWhereWhenLong`). _Still TODO: move the remaining DML builders (select lists, CASE, joins, subqueries) from string assembly onto Doc._
|
||||
- ✅ Doc-IR core (`pkg/format/doc.go`: Text/Line/SoftLine/Group/Indent/IfBreak + `Render`) and `line_width` (default 120, 0 = unlimited). First consumer: `where_wrap: when_long` (`dmlWhereWhenLong`). _Still TODO: move the remaining DML builders (select lists, joins, subqueries) from string assembly onto Doc._
|
||||
- _Still TODO: LSP range formatting._
|
||||
|
||||
## ✅ Config expansion — DataGrip settings parity
|
||||
@@ -272,10 +272,9 @@ Both the simple (`CASE x WHEN ...`) and searched (`CASE WHEN ...`) forms are sup
|
||||
one level.
|
||||
- `case_end` (default `new_line`): placement of the closing `END` when wrapped —
|
||||
`new_line` on its own line, `same_line` glued to the last WHEN/ELSE line.
|
||||
- `case_collapse` (default `false`): when `true` *and* the fully-inlined rendering is
|
||||
≤ `caseCollapseWidth` (60 chars), keeps the wrapped CASE on one line anyway, overriding
|
||||
`case_when_wrap`; longer CASEs still wrap. (No Doc-IR/line-width awareness exists yet, so
|
||||
this is a fixed length threshold rather than a true "does it fit the line" check.)
|
||||
- `case_collapse` (default `false`): when `true`, keeps the wrapped CASE on one line anyway if the
|
||||
fully-inlined rendering fits in `line_width` (default 120), overriding `case_when_wrap`;
|
||||
longer CASEs still wrap. Rendered through the Doc-IR (`Group(IfBreak(wrapped, inline))`).
|
||||
- `record_space_before_paren` (default `false`): scoped to the `ROW` keyword specifically
|
||||
(`ROW(1, 2)` vs `ROW (1, 2)`) — bare `(a, b)` record literals are indistinguishable from
|
||||
grouping parens at the token level, so this setting only fires on an explicit `ROW(`.
|
||||
|
||||
Reference in New Issue
Block a user