[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
05/08: read-print: Do not use extended notation when printing '1+', '1-'
From: |
guix-commits |
Subject: |
05/08: read-print: Do not use extended notation when printing '1+', '1-', etc. |
Date: |
Mon, 9 Jan 2023 12:08:55 -0500 (EST) |
civodul pushed a commit to branch master
in repository guix.
commit 6c343d0d0f6b8560e9eb594ce1d4f984753a35fb
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Mon Jan 9 17:04:55 2023 +0100
read-print: Do not use extended notation when printing '1+', '1-', etc.
* guix/read-print.scm (%special-non-extended-symbols): New variable.
(symbol->display-string): New procedure.
(pretty-print-with-comments): Use it in lieu of 'string->symbol'.
* tests/read-print.scm: Add test.
---
guix/read-print.scm | 22 +++++++++++++++++++---
tests/read-print.scm | 7 ++++++-
2 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/guix/read-print.scm b/guix/read-print.scm
index 8a720ef2ef..ccddca732d 100644
--- a/guix/read-print.scm
+++ b/guix/read-print.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2021-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021-2023 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -488,6 +488,19 @@ each line except the first one (they're assumed to be
already there)."
(8 "#o"))
(number->string integer base)))
+(define %special-non-extended-symbols
+ ;; Special symbols that can be written without the #{...}# notation for
+ ;; extended symbols: 1+, 1-, 123/, etc.
+ (make-regexp "^[0-9]+[[:graph:]]+$" regexp/icase))
+
+(define (symbol->display-string symbol context)
+ "Return the most appropriate representation of SYMBOL, resorting to extended
+symbol notation only when strictly necessary."
+ (let ((str (symbol->string symbol)))
+ (if (regexp-exec %special-non-extended-symbols str)
+ str ;no need for the #{...}# notation
+ (object->string symbol))))
+
(define* (pretty-print-with-comments port obj
#:key
(format-comment
@@ -561,7 +574,8 @@ FORMAT-VERTICAL-SPACE; a useful value of
'canonicalize-vertical-space'."
((? string? str)
(>= (+ (string-width str) 2 indent) max-width))
((? symbol? symbol)
- (>= (+ (string-width (symbol->string symbol)) indent)
+ (>= (+ (string-width (symbol->display-string symbol context))
+ indent)
max-width))
((? boolean?)
(>= (+ 2 indent) max-width))
@@ -647,7 +661,7 @@ FORMAT-VERTICAL-SPACE; a useful value of
'canonicalize-vertical-space'."
;; and following arguments are less indented.
(let* ((lead (special-form-lead head context))
(context (cons head context))
- (head (symbol->string head))
+ (head (symbol->display-string head (cdr context)))
(total (length arguments)))
(unless delimited? (display " " port))
(display "(" port)
@@ -727,6 +741,8 @@ FORMAT-VERTICAL-SPACE; a useful value of
'canonicalize-vertical-space'."
(printed-string obj context))
((integer? obj)
(integer->string obj context))
+ ((symbol? obj)
+ (symbol->display-string obj context))
(else
(object->string obj))))
(len (string-width str)))
diff --git a/tests/read-print.scm b/tests/read-print.scm
index ea52a52145..79a4101be6 100644
--- a/tests/read-print.scm
+++ b/tests/read-print.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2021-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021-2023 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -142,6 +142,11 @@ expressions."
(+ x y))"
#:max-width 11)
+(test-pretty-print "\
+(begin
+ 1+ 1- 123/ 456*
+ (1+ 41))")
+
(test-pretty-print "\
(lambda (x y)
;; This is a procedure.
- branch master updated (8b314efd50 -> 84f117f495), guix-commits, 2023/01/09
- 01/08: doc: cookbook: Add "Installing Guix on a Cluster" chapter., guix-commits, 2023/01/09
- 02/08: substitute: Parse '_NIX_OPTIONS' once., guix-commits, 2023/01/09
- 04/08: daemon: Improve error message for wrong hash sizes., guix-commits, 2023/01/09
- 05/08: read-print: Do not use extended notation when printing '1+', '1-', etc.,
guix-commits <=
- 06/08: gnu: Add minetest-wielded-light., guix-commits, 2023/01/09
- 08/08: gnu: LLVM, Clang, libomp, lld: Update to 15.0.6., guix-commits, 2023/01/09
- 03/08: derivations: 'read-derivation' correctly handles case with empty hash., guix-commits, 2023/01/09
- 07/08: gnu: Add minetest-mobs-monster., guix-commits, 2023/01/09