diff options
author | Ludovic Courtès <ludo@gnu.org> | 2022-07-04 23:29:55 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2022-07-04 23:38:38 +0200 |
commit | 8d9291bd2c36810be50ea340cefa481a42c60a2b (patch) | |
tree | bb3a9ba4e5cf4ec1de4a54a2e986c078ae1a940d /guix | |
parent | 3348e485b7229e062e563945ed7e6ac216f25125 (diff) |
style: For 'let' and similar forms, emit one binding per line.
Previously, 'let' bindings could be rendered like this:
(let ((x 1) (y 2)
(z 3))
...)
With this change, each bindings goes in its own line.
Partly fixes <https://issues.guix.gnu.org/56297>.
Reported by Maxime Devos <maximedevos@telenet.be>.
* guix/scripts/style.scm (pretty-print-with-comments)[list-of-lists?]:
New procedure.
Use it.
* tests/style.scm: Add tests with 'let' and 'substitute-keyword-arguments'.
Diffstat (limited to 'guix')
-rw-r--r-- | guix/scripts/style.scm | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/guix/scripts/style.scm b/guix/scripts/style.scm index 09937d9e02..fd5f7f5c26 100644 --- a/guix/scripts/style.scm +++ b/guix/scripts/style.scm @@ -272,6 +272,16 @@ included in the output. Lists longer than LONG-LIST are written as one element per line. Comments are passed through FORMAT-COMMENT before being emitted; a useful value for FORMAT-COMMENT is 'canonicalize-comment'." + (define (list-of-lists? head tail) + ;; Return true if HEAD and TAIL denote a list of lists--e.g., a list of + ;; 'let' bindings. + (match head + ((thing _ ...) ;proper list + (and (not (memq thing + '(quote quasiquote unquote unquote-splicing))) + (pair? tail))) + (_ #f))) + (let loop ((indent indent) (column indent) (delimited? #t) ;true if comes after a delimiter @@ -436,7 +446,8 @@ FORMAT-COMMENT is 'canonicalize-comment'." (column (if overflow? (+ indent 1) (+ column (if delimited? 1 2)))) - (newline? (newline-form? head context)) + (newline? (or (newline-form? head context) + (list-of-lists? head tail))) ;'let' bindings (context (cons head context))) (if overflow? (begin |