all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Ludovic Courtès" <ludo@gnu.org>
To: guix-devel@gnu.org
Subject: [PATCH 2/6] ui: Define and honor '&error-location' and '&fix-hint' conditions.
Date: Wed,  8 Nov 2017 14:09:17 +0100	[thread overview]
Message-ID: <20171108130921.25202-3-ludo@gnu.org> (raw)
In-Reply-To: <20171108130921.25202-1-ludo@gnu.org>

* guix/utils.scm (&error-location, &fix-hint): New condition types.
* guix/ui.scm (report-load-error): Handle them.
(call-with-error-handling): Honor '&error-location'.
---
 guix/ui.scm    | 23 +++++++++++++++++++----
 guix/utils.scm | 17 +++++++++++++++++
 2 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/guix/ui.scm b/guix/ui.scm
index 40371e471..a1152605e 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -251,10 +251,20 @@ ARGS is the list of arguments received by the 'throw' handler."
                (location->string loc) message)))
     (('srfi-34 obj)
      (if (message-condition? obj)
-         (report-error (G_ "~a~%")
-                       (gettext (condition-message obj)
-                                %gettext-domain))
-         (report-error (G_ "exception thrown: ~s~%") obj)))
+         (if (error-location? obj)
+             (format (current-error-port)
+                     (G_ "~a: error: ~a~%")
+                     (location->string (error-location obj))
+                     (gettext (condition-message obj)
+                              %gettext-domain))
+             (report-error (G_ "~a~%")
+                           (gettext (condition-message obj)
+                                    %gettext-domain)))
+         (report-error (G_ "exception thrown: ~s~%") obj))
+     (when (fix-hint? obj)
+       (format (current-error-port) (G_ "hint: ~a~%")
+               (fill-paragraph (texi->plain-text (condition-fix-hint obj))
+                               (terminal-columns) 8))))
     ((error args ...)
      (report-error (G_ "failed to load '~a':~%") file)
      (apply display-error frame (current-error-port) args))))
@@ -517,6 +527,11 @@ interpreted."
 directories:~{ ~a~}~%")
                     (file-search-error-file-name c)
                     (file-search-error-search-path c)))
+            ((and (error-location? c) (message-condition? c))
+             (format (current-error-port)
+                     (G_ "~a: error: ~a~%")
+                     (location->string (error-location c))
+                     (gettext (condition-message c) %gettext-domain)))
             ((message-condition? c)
              ;; Normally '&message' error conditions have an i18n'd message.
              (leave (G_ "~a~%")
diff --git a/guix/utils.scm b/guix/utils.scm
index eb1ec29b3..c0ffed172 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -28,6 +28,7 @@
   #:use-module (srfi srfi-9)
   #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-35)
   #:use-module (srfi srfi-39)
   #:use-module (ice-9 binary-ports)
   #:autoload   (rnrs io ports) (make-custom-binary-input-port)
@@ -60,6 +61,14 @@
             source-properties->location
             location->source-properties
 
+            &error-location
+            error-location?
+            error-location
+
+            &fix-hint
+            fix-hint?
+            condition-fix-hint
+
             nix-system->gnu-triplet
             gnu-triplet->nix-system
             %current-system
@@ -750,6 +759,14 @@ a location object."
     (column   . ,(location-column loc))
     (filename . ,(location-file loc))))
 
+(define-condition-type &error-location &error
+  error-location?
+  (location  error-location))                     ;<location>
+
+(define-condition-type &fix-hint &condition
+  fix-hint?
+  (hint condition-fix-hint))                      ;string
+
 ;;; Local Variables:
 ;;; eval: (put 'call-with-progress-reporter 'scheme-indent-function 1)
 ;;; End:
-- 
2.15.0

  parent reply	other threads:[~2017-11-08 13:09 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-06 20:12 The usability of Guix configurations myglc2
2017-11-06 22:16 ` Leo Famulari
2017-11-06 23:26   ` myglc2
2017-11-06 23:26   ` bug#29072: " myglc2
2017-11-07  1:56   ` myglc2
2017-11-07 11:05     ` julien lepiller
2017-11-07 12:52       ` Hartmut Goebel
2017-11-07 13:13         ` julien lepiller
2017-11-07 14:11           ` myglc2
2017-11-07 14:52             ` julien lepiller
2017-11-07 15:59               ` myglc2
2017-11-07 16:25                 ` [PATCH] " julien lepiller
     [not found]                   ` <867ev2t13i.fsf@gmail.com>
2017-11-07 21:27                     ` Julien Lepiller
2017-11-07 22:56                       ` myglc2
2017-11-07 22:47                   ` Reporting module errors Ludovic Courtès
2017-11-08  1:26                     ` myglc2
2017-11-08 10:52                     ` Hartmut Goebel
2017-11-08 14:02                       ` Ludovic Courtès
2017-11-08 13:09                     ` [PATCH 0/6] Error reporting and hints for missing modules Ludovic Courtès
2017-11-08 13:09                       ` [PATCH 1/6] ui: Introduce (guix i18n) Ludovic Courtès
2017-11-08 13:09                       ` Ludovic Courtès [this message]
2017-11-08 13:09                       ` [PATCH 3/6] services: 'fold-service-types' honors its seed Ludovic Courtès
2017-11-08 13:09                       ` [PATCH 4/6] services: 'fold-service-types' includes (gnu services) Ludovic Courtès
2017-11-08 13:09                       ` [PATCH 5/6] services: Add 'lookup-service-types' Ludovic Courtès
2017-11-08 13:09                       ` [PATCH 6/6] gnu: Improve error reporting of the use-.*modules macros Ludovic Courtès
2017-11-11  2:02                         ` Chris Marusich
2017-11-11 13:56                           ` Ludovic Courtès
2017-11-11 17:00                             ` Chris Marusich
2017-11-08 15:33                       ` [PATCH 0/6] Error reporting and hints for missing modules julien lepiller
2017-11-08 17:42                         ` myglc2
2017-11-08 19:07                           ` myglc2
2017-11-08 21:42                             ` Ludovic Courtès
2017-11-09 23:04                             ` Ludovic Courtès
2017-11-10 14:47                               ` myglc2
2017-11-10 23:01                                 ` Julien Lepiller
2017-11-11 22:00                                   ` Ludovic Courtès
2017-11-11 22:02                                 ` Ludovic Courtès
2017-11-14  1:12                                   ` myglc2
2017-11-30 10:44                                     ` Ludovic Courtès
2017-11-07 14:45           ` The usability of Guix configurations Hartmut Goebel
2017-11-07  1:56   ` bug#29072: " myglc2
2017-11-07  2:30   ` myglc2
2017-11-07  3:03     ` myglc2
2017-11-07  2:30   ` bug#29072: " myglc2
2017-11-07  2:59   ` myglc2
2017-11-07 20:54   ` myglc2
2017-11-06 22:16 ` bug#29072: " Leo Famulari
2017-11-07 10:23 ` Ludovic Courtès
2017-11-08 19:40   ` myglc2
2017-11-07 10:23 ` bug#29072: " Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171108130921.25202-3-ludo@gnu.org \
    --to=ludo@gnu.org \
    --cc=guix-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.