~ruther/guix-local

a6e22d84450450cacc6fc36445f6ae378a5b7ad0 — Ludovic Courtès 8 years ago 3f81ca3
ui: Improve reporting of missing closing parentheses.

Suggested by Ricardo Wurmus.
Works around <https://bugs.gnu.org/28295>.

* guix/ui.scm (report-load-error): Add case for 'read-error'.
* tests/guix-system.sh: Test missing-closing-paren errors.
2 files changed, 24 insertions(+), 0 deletions(-)

M guix/ui.scm
M tests/guix-system.sh
M guix/ui.scm => guix/ui.scm +9 -0
@@ 257,6 257,15 @@ ARGS is the list of arguments received by the 'throw' handler."
    (('system-error . rest)
     (let ((err (system-error-errno args)))
       (report-error (G_ "failed to load '~a': ~a~%") file (strerror err))))
    (('read-error "scm_i_lreadparen" message _ ...)
     ;; Guile's missing-paren messages are obscure so we make them more
     ;; intelligible here.
     (if (string-suffix? "end of file" message)
         (let ((location (string-drop-right message
                                            (string-length "end of file"))))
           (format (current-error-port) (G_ "~amissing closing parenthesis~%")
                   location))
         (apply throw args)))
    (('syntax-error proc message properties form . rest)
     (let ((loc (source-properties->location properties)))
       (format (current-error-port) (G_ "~a: error: ~a~%")

M tests/guix-system.sh => tests/guix-system.sh +15 -0
@@ 53,6 53,21 @@ else
fi


cat > "$tmpfile"<<EOF
;; This is line 1, and the next one is line 2.
   (operating-system
;; This is line 3, and there is no closing paren!
EOF

if guix system vm "$tmpfile" 2> "$errorfile"
then
    # This must not succeed.
    exit 1
else
    grep "$tmpfile:4:1: missing closing paren" "$errorfile"
fi


# Reporting of unbound variables.

cat > "$tmpfile" <<EOF