From 7931ac810b8feaadcbbfa3a31786087da2d5ee73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Mon, 24 Apr 2023 10:10:00 +0200 Subject: [PATCH] read-print: 'pretty-print-with-comments' keeps newlines on long strings. * guix/read-print.scm (printed-string)[preserve-newlines?]: New procedure. Use it to preserve newlines on long strings. * tests/read-print.scm: Add test. --- guix/read-print.scm | 11 +++++++++-- tests/read-print.scm | 5 +++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/guix/read-print.scm b/guix/read-print.scm index 515eb7669c..d834105dce 100644 --- a/guix/read-print.scm +++ b/guix/read-print.scm @@ -420,11 +420,18 @@ (define %natural-whitespace-string-forms (define (printed-string str context) "Return the read syntax for STR depending on CONTEXT." + (define (preserve-newlines? str) + (and (> (string-length str) 40) + (string-index str #\newline))) + (match context (() - (object->string str)) + (if (preserve-newlines? str) + (escaped-string str) + (object->string str))) ((head . _) - (if (memq head %natural-whitespace-string-forms) + (if (or (memq head %natural-whitespace-string-forms) + (preserve-newlines? str)) (escaped-string str) (object->string str))))) diff --git a/tests/read-print.scm b/tests/read-print.scm index f4627e076a..c2b236b172 100644 --- a/tests/read-print.scm +++ b/tests/read-print.scm @@ -194,6 +194,11 @@ (define-syntax-rule (test-pretty-print/sequence str args ...) (test-pretty-print "\ (string-append \"a\\tb\" \"\\n\")") +(test-pretty-print "\ +(display \"This is a very long string. +It contains line breaks, which are preserved, +because it's a long string.\")") + (test-pretty-print "\ (description \"abcdefghijkl mnopqrstuvwxyz.\")"