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'.master
parent
3348e485b7
commit
8d9291bd2c
|
@ -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
|
||||
|
|
|
@ -504,6 +504,25 @@ mnopqrstuvwxyz.\")"
|
|||
#:make-flags #~'(\"ANSWER=42\")
|
||||
#:tests? #f)))")
|
||||
|
||||
(test-pretty-print "\
|
||||
(let ((x 1)
|
||||
(y 2)
|
||||
(z (let* ((a 3)
|
||||
(b 4))
|
||||
(+ a b))))
|
||||
(list x y z))")
|
||||
|
||||
(test-pretty-print "\
|
||||
(substitute-keyword-arguments (package-arguments x)
|
||||
((#:phases phases)
|
||||
`(modify-phases ,phases
|
||||
(add-before 'build 'do-things
|
||||
(lambda _
|
||||
#t))))
|
||||
((#:configure-flags flags)
|
||||
`(cons \"--without-any-problem\"
|
||||
,flags)))")
|
||||
|
||||
(test-equal "pretty-print-with-comments, canonicalize-comment"
|
||||
"\
|
||||
(list abc
|
||||
|
|
Reference in New Issue