diff options
author | Ludovic Courtès <ludo@gnu.org> | 2017-10-10 10:22:43 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2017-10-10 23:12:03 +0200 |
commit | a6e22d84450450cacc6fc36445f6ae378a5b7ad0 (patch) | |
tree | 2e5043bed9e51706a51f95bcd6f7b23c2ba45ba5 | |
parent | 3f81ca324b92fca653df26be112d866ea019e16a (diff) | |
download | guix-a6e22d84450450cacc6fc36445f6ae378a5b7ad0.tar.gz |
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.
-rw-r--r-- | guix/ui.scm | 9 | ||||
-rw-r--r-- | tests/guix-system.sh | 15 |
2 files changed, 24 insertions, 0 deletions
diff --git a/guix/ui.scm b/guix/ui.scm index 6dfc8c7a5b..3c8734a7d5 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -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~%") diff --git a/tests/guix-system.sh b/tests/guix-system.sh index d575795ea0..31ee637133 100644 --- a/tests/guix-system.sh +++ b/tests/guix-system.sh @@ -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 |