read-print: Correctly handle comments that follow a list head.

Fixes <https://issues.guix.gnu.org/61013>.
Reported by Maxim Cournoyer <maxim.cournoyer@gmail.com>.

* guix/read-print.scm (pretty-print-with-comments)[starts-with-line-comment?]:
New procedure.
Use it when printing a list.
* tests/read-print.scm: Add two tests.
This commit is contained in:
Ludovic Courtès 2023-03-07 11:31:12 +01:00
parent 11f6bdc547
commit 0a37921d85
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 17 additions and 1 deletions

View File

@ -529,6 +529,12 @@ FORMAT-VERTICAL-SPACE; a useful value of 'canonicalize-vertical-space'."
(pair? tail)))
(_ #f)))
(define (starts-with-line-comment? lst)
;; Return true if LST starts with a line comment.
(match lst
((x . _) (and (comment? x) (not (comment-margin? x))))
(_ #f)))
(let loop ((indent indent)
(column indent)
(delimited? #t) ;true if comes after a delimiter
@ -710,7 +716,8 @@ FORMAT-VERTICAL-SPACE; a useful value of 'canonicalize-vertical-space'."
(+ indent 1)
(+ column (if delimited? 1 2))))
(newline? (or (newline-form? head context)
(list-of-lists? head tail))) ;'let' bindings
(list-of-lists? head tail) ;'let' bindings
(starts-with-line-comment? tail)))
(context (cons head context)))
(if overflow?
(begin

View File

@ -210,6 +210,15 @@ mnopqrstuvwxyz.\")"
\"abcdefghijklmnopqrstuvwxyz\")"
#:max-width 33)
(test-pretty-print "\
(list ;margin comment
a b c)")
(test-pretty-print "\
(list
;; This is a line comment immediately following the list head.
#:test-flags #~(list \"-m\" \"not external and not samples\"))")
(test-pretty-print "\
(modify-phases %standard-phases
(replace 'build